>>> class A:
... a = 0
...
>>> a1 = A()
>>> a2 = A()
>>> a1.a = 1
>>> print a2.a
0
有2'a'int分别属于a1和a2
>>> class B:
... a = A()
...
>>> b1 = B()
>>> b2 = B()
>>> b1.a.a = 2
>>> print b2.a.a
2
只有一个'a'对象与b1和b2共享。我知道它可以在__init__
中初始化以使其属于对象而不是类,但为什么第一个示例中的int'a'不会被共享?
答案 0 :(得分:4)
没有区别。 a
和b
都是类属性。如果您需要实例属性,请在self.whatevername
方法中设置__init__
:
class A(object):
b = B() # Class attribute
def __init__(self):
self.a = 1 # Instance attribute
执行a1.a = 1
时,您将创建一个隐藏旧类属性的新a
实例属性。
同样,如果您尝试b1.a = A()
而不是b1.a.a = 1
,则可以在b1
上创建新的实例属性,而不是修改类级A
实例的属性。 />
如果整数是可变的并且您尝试变异a1.a
- 让我们假装他们有一个screw_with
方法 - 那么a1.a.screw_with()
将会使用类级a
int。