是否有一些python规则声明在“ init ”方法中声明/定义所有全局变量?为什么python允许这个?
例如,,请参阅以下代码:
class Myclass():
def __init__(self,input):
self.input = input
def a_method(self):
self.sneaky = {}
local_var = 'a var'
return local_var
def another_method(self):
print self.input
print self.sneaky, ', O sneaky you bad var'
return
如果我的班级有很多方法,变量'self.sneaky'很难被发现。并且必须先调用“a_method”,否则在调用“another_method”时会引发AttributeError。我只是在某人的代码中发现它,并想知道这是否是常见做法。
答案 0 :(得分:1)
首先,您不是在讨论全局变量,而是在谈论实例变量。然后,是否在方法或构造函数中声明变量取决于您使用的场景。
基本上,唯一的规则是在使用变量之前始终声明变量。 (或者你会得到AttributeError
例外)。
通常,在init中声明类的所有成员是个好主意,因此您可以使用默认值来处理它们存在的假设。尽管如此,有时您可能更愿意推迟创建类类型以及元素的归属。
一个很好的例子是,如果在一个循环中你创建了一百万个实例,那么你只选择一些在给定时间使用的实例。然后你可能想让构造函数尽可能简单地使用instanciation所需的内容,并创建一个populate()
方法,在使用它之前调用它来添加你关于的默认成员使用。在构建图形用户界面时经常会看到这种模式。
HTH