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

在Python对象中设置数据字段时,我应该使用;“自我”;关键词?,python,Python,我应该写信吗 class MyClass: def __init__(self): self.field = 0 或 这些语句之间有什么区别吗?前者将值设置为类的属性。后者只是一个局部变量 如果在你的程序中的其他地方你做了 foo = MyClass(); print foo.field; 上面的print语句只适用于第一个代码段,而不适用于第二个代码段。前者将值设置为类的属性。后者只是一个局部变量 如果在你的程序中的其他地方你做了 foo = MyClass()

我应该写信吗

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


这些语句之间有什么区别吗?

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

如果在你的程序中的其他地方你做了

foo = MyClass();
print foo.field;

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

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

如果在你的程序中的其他地方你做了

foo = MyClass();
print foo.field;
上面的print语句只适用于第一个代码段,而不适用于第二个代码段。

是的,必须使用
self
变量来设置Python对象/实例的属性

在第二种情况下,您只是在
\uuuu init\uuuu
中创建一个局部变量,而不是定义一个属性

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

print MyClass().field # an error! it's not defined!
您可能会被误导,只需在
块中使用原始赋值来设置类属性:

class MyClass:
    a = 2

print MyClass.a # 2
块中的行为是不寻常的,在方法内部没有类似的行为。

是的,必须使用
self
变量来设置Python对象/实例的属性

在第二种情况下,您只是在
\uuuu init\uuuu
中创建一个局部变量,而不是定义一个属性

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

print MyClass().field # an error! it's not defined!
您可能会被误导,只需在
块中使用原始赋值来设置类属性:

class MyClass:
    a = 2

print MyClass.a # 2

块中的行为是不寻常的,并且在方法内部没有类似的行为。

第一块代码创建了一个实例属性,一旦创建了类的实例,就可以访问该属性:

>>> a = MyClass()
>>> a.field
0
第二个块的
字段
变量的作用域仅在
\uuuu init\uuuu
函数中,因此访问该作用域之外的变量将不起作用:

>>> a = MyClass()
>>> a.field
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute 'field'
>a=MyClass()
>>>阿菲尔德
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:MyClass实例没有属性“field”

第一段代码创建了一个实例属性,一旦创建了类的实例,就可以访问该属性:

>>> a = MyClass()
>>> a.field
0
第二个块的
字段
变量的作用域仅在
\uuuu init\uuuu
函数中,因此访问该作用域之外的变量将不起作用:

>>> a = MyClass()
>>> a.field
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute 'field'
>a=MyClass()
>>>阿菲尔德
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:MyClass实例没有属性“field”

我不认为后者设置了
MyClass.field
。我不认为后者设置了
MyClass.field