'b'和'c'之间有什么区别?

时间:2010-01-01 02:01:43

标签: python class

class a(object):
    b = 'bbbb'
    def __init__(self):
        self.c = 'cccc'

我认为他们是一样的;有什么不同吗?

4 个答案:

答案 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'