在Python对象中设置数据字段时,我应该使用“self”关键字吗?

时间:2012-08-19 00:09:55

标签: python

我应该写

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

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

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

3 个答案:

答案 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语句仅适用于第一个代码段,而不适用于第二个。