在 Python 中定义类变量的正确方法[重复]
- 2025-03-18 08:54:00
- admin 原创
- 49
问题描述:
我注意到在 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"
初始化类属性的正确方法是什么?
解决方案 1:
这两种方式都不一定正确或不正确,它们只是两种不同的阶级元素:
方法之外的元素
__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
如您所见,当我们更改类元素时,两个对象都会发生更改。但是,当我们更改对象元素时,另一个对象保持不变。
解决方案 2:
我认为这个例子解释了风格之间的区别:
james@bodacious-wired:~$cat test.py
#!/usr/bin/env python
class MyClass:
element1 = "Hello"
def __init__(self):
self.element2 = "World"
obj = MyClass()
print dir(MyClass)
print "--"
print dir(obj)
print "--"
print obj.element1
print obj.element2
print MyClass.element1 + " " + MyClass.element2
james@bodacious-wired:~$./test.py
['__doc__', '__init__', '__module__', 'element1']
--
['__doc__', '__init__', '__module__', 'element1', 'element2']
--
Hello
World
Traceback (most recent call last):
File "./test.py", line 17, in <module>
print MyClass.element2
AttributeError: class MyClass has no attribute 'element2'
element1 与类绑定,element2 与类的实例绑定。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD