class a(object):
b = 'bbbb'
def __init__(self):
self.c = 'cccc'
我认为他们是一样的;有什么不同吗?
答案 0 :(得分:9)
是的,有区别。
b
是一个类变量...由a
的所有实例共享,而c
是一个实例变量,它将独立存在于每个实例中。
答案 1 :(得分:5)
b
是一个类变量,而c
是一个实例变量。
>>> a.b
'bbbb'
>>> a.c
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'a' has no attribute 'c'
>>> a().b
'bbbb'
>>> a().c
'cccc'
类的实例可能具有不同的实例变量值,但它们共享相同的类变量。
答案 2 :(得分:2)
'b'是一个类属性,直接在类对象'a'上设置。 'c'是一个实例属性,直接在self上设置。由于查找的工作方式,self.b
会找到a.b
,但您无法使用a.c
(因为它不存在)。
答案 3 :(得分:2)
>>> class a(object):
... b = 'bbbb'
... def __init__(self):
... self.c = 'cccc'
...
>>> a1=a()
>>> a2=a()
>>> a1.b
'bbbb'
>>> a2.b
'bbbb'
>>> a1.c='dddd'
>>> a1.c
'dddd'
>>> a2.c
'cccc'
>>> a.b= 'common'
>>> a1.b
'common'
>>> a2.b
'common'