2012-04-30 17 views

回答

9

由於內置類型不具有與它們相關的字典持有添加的屬性:

>>> o = object() 
>>> dir(o) 
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__'] 

看到了嗎?否__dict__

但是,增加一個子類的地方給人的屬性去:

>>> class A(object): 
.... pass 
.... 
>>> a = A() 
>>> dir(a) 
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__'] 

說這是「因爲他們在C中定義」不是「爲什麼」。您當然可以使用實例字典在C中定義一個類型。

2

object在C中定義。您不能將任意屬性添加到C unless you fill the appropriate slots in the type definition中定義的類型的實例。

+2

這意味着你不能用C實例字典定義一個類型,並且不用C編寫的實現不會有這個限制。這兩個都不是真的。 「你不能」也不是「爲什麼你不能」的答案。 – agf

相關問題