1

我应该写吗

class MyClass:
     def __init__(self):
         self.field = 0

或者

class MyClass:
     def __init__(self):
         field = 0

这些陈述之间有什么区别吗?

4

3 回答 3

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是不寻常的,您不会在方法中得到类似的行为。

于 2012-08-19T00:11:55.033 回答
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'
于 2012-08-19T00:13:31.520 回答
0

前者将值设置为类的属性。后者,只是一个局部变量。

如果在你的程序的其他地方你这样做

foo = MyClass();
print foo.field;

上面的 print 语句只适用于第一个代码片段,而不适用于第二个。

于 2012-08-19T00:11:43.510 回答