我应该写吗
class MyClass:
def __init__(self):
self.field = 0
或者
class MyClass:
def __init__(self):
field = 0
这些陈述之间有什么区别吗?
我应该写吗
class MyClass:
def __init__(self):
self.field = 0
或者
class MyClass:
def __init__(self):
field = 0
这些陈述之间有什么区别吗?
是的,您必须使用该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
是不寻常的,您不会在方法中得到类似的行为。
第一段代码创建了一个实例属性,一旦创建了类的实例就可以访问该属性:
>>> 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'
前者将值设置为类的属性。后者,只是一个局部变量。
如果在你的程序的其他地方你这样做
foo = MyClass();
print foo.field;
上面的 print 语句只适用于第一个代码片段,而不适用于第二个。