我应该写
class MyClass:
def __init__(self):
self.field = 0
或
class MyClass:
def __init__(self):
field = 0
这些陈述之间有什么区别吗?
答案 0 :(得分:5)
是的,您必须使用self
变量来设置Python对象/实例的属性。
在第二种情况下,您只是在__init__
中创建一个局部变量,而不是定义属性。
class MyClass:
def __init__(self):
field = 0
print MyClass().field # an error! it's not defined!
您可能会被class
块中的原始分配设置类属性的方式误导:
class MyClass:
a = 2
print MyClass.a # 2
class
块中的行为是不常见的,并且在方法中没有类似的行为。
答案 1 :(得分:3)
第一个代码块创建了一个实例属性,一旦创建了一个类的实例就可以访问该属性:
>>> a = MyClass()
>>> a.field
0
第二个块的field
变量的范围仅在__init__
函数内,因此访问该范围之外的变量将不起作用:
>>> a = MyClass()
>>> a.field
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute 'field'
答案 2 :(得分:0)
前者将值设置为类的属性。后者,只是一个局部变量。
如果您的计划中有其他地方
foo = MyClass();
print foo.field;
上面的print语句仅适用于第一个代码段,而不适用于第二个。