在Python中定义类变量的正确方法
问题内容:
这个问题已经在这里有了答案 :
8年前关闭。
可能重复:
类__init
__()函数内部和外部的变量
我注意到在Python中,人们以两种不同的方式初始化其类属性。
第一种方式是这样的:
class MyClass:
__element1 = 123
__element2 = "this is Africa"
def __init__(self):
#pass or something else
其他样式如下:
class MyClass:
def __init__(self):
self.__element1 = 123
self.__element2 = "this is Africa"
初始化类属性的正确方法是哪种?
问题答案:
两种方法都不一定正确或不正确,它们只是两种不同的类元素:
__init__
方法外的元素是静态元素;他们属于阶级。- 内部元件
__init__
方法是对象的元件(self
); 他们不属于这个阶级。
您将通过一些代码更清楚地看到它:
class MyClass:
static_elem = 123
def __init__(self):
self.object_elem = 456
c1 = MyClass()
c2 = MyClass()
# Initial values of both elements
>>> print c1.static_elem, c1.object_elem
123 456
>>> print c2.static_elem, c2.object_elem
123 456
# Nothing new so far ...
# Let's try changing the static element
MyClass.static_elem = 999
>>> print c1.static_elem, c1.object_elem
999 456
>>> print c2.static_elem, c2.object_elem
999 456
# Now, let's try changing the object element
c1.object_elem = 888
>>> print c1.static_elem, c1.object_elem
999 888
>>> print c2.static_elem, c2.object_elem
999 456
如您所见,当我们更改class元素时,这两个对象都发生了变化。但是,当我们更改对象元素时,另一个对象保持不变。