Python类成员定义语法是否不一致?

时间:2014-05-14 06:00:48

标签: python

>>> 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'不会被共享?

1 个答案:

答案 0 :(得分:4)

没有区别。 ab都是类属性。如果您需要实例属性,请在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。