2012-02-29 36 views
6

Pythonデータモデルを理解していると、クラスとクラスインスタンスの両方にすべての属性を含む__dict__オブジェクトが関連付けられています。しかし、私は少し具体的なクラスインスタンス(例えば、strのインスタンス)が__dict__属性を持たない理由について少し混乱しています。Python:組み込みクラスインスタンスに__dict__属性がないのはなぜですか?

私はカスタムクラスを作成する場合:私は内蔵のインスタンスで同じことをしようとした場合

>>> f = Foo() 
>>> print(f.__dict__) 
{'lastname': 'Smith', 'firstname': 'John'} 

しかし:

class Foo: 
    def __init__(self): 
      self.firstname = "John" 
      self.lastname = "Smith" 

その後、私は言ってインスタンス変数を取得することができますstrで、私が取得:

>>> s = "abc" 
>>> print(s.__dict__) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute '__dict__' 

、なぜstrのインスタンスは0を持っていません属性?

+2

をそこでしょう'__dict __.__ dict__'にする必要があります - どのくらい深い再帰が必要ですか? –

答えて

10

Cで定義された型のインスタンスには、デフォルトで__dict__属性がありません。

0

ただ、これに追加する:

あなたは、この使用して読み取るだけ__dict__の同等のものを得ることができます、すべての辞書は `__dict__`を持っていた場合、これについては詳しく説明し

{s:getattr(x,s) for x in dir(x)} 
関連する問題