2010-01-01 300 views

回答

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' 
9

是的,有區別。

b是一個類變量......一個由a的所有實例共享的類,而c是一個實例變量,它將獨立存在於每個實例中。

+3

你可能是指「是」,因爲*有*差異。 – fsanches 2010-01-01 02:22:29

2

'b'是一個類屬性,直接在類對象'a'上設置。 'c'是一個實例屬性,直接在self上設置。 self.b由於查找的工作原理會找到a.b,因此不能使用a.c(因爲它不存在)。

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' 

類的實例對於它們的實例變量可能具有不同的值,但它們共享相同的類變量。

相關問題