2011-08-07 6 views

答えて

5

部分的な答えは、あなたが__dict__の目的を誤解していることです。 __dict__はアイテムではなく属性を格納するために使用され、のほとんどのユーザ定義オブジェクトに存在します。実際に、dictを適切な方法でサブクラス化すると、__dict__に値が入ります。

>>> class Foo(dict): 
...  def __init__(self, *args, **kwargs): 
...   super(Foo, self).__init__(*args, **kwargs) 
...   self.banana = 'banana' 
...   self['banana'] = 'not really a banana' 
... 
>>> f = Foo() 
>>> f.__dict__ 
{'banana': 'banana'} 
>>> f.banana 
'banana' 
>>> f['banana'] 
'not really a banana' 
+0

@Gabe、yeah、ok - edited。 – senderle

5

dictクラスは純粋にC言語で実装されています。そのデータストレージはその実装にとってプライベートなものです。

思考実験として、名前/値のペアをPythonの辞書に入れると想像してください。別のPython dictで?それで、まあ、あなたはアイデアを得る!

+1

+1データストレージに関する二次質問に答えるためです。 – senderle

2

のdictオブジェクトは、実際に__dict__を持っていないのでので、あなたが参照している__dict__は、あなたのオブジェクトFoobarにローカル辞書です。 Foobarには属性がありません。__dict__は空です。

+0

少なくとも私は1つの投票を得ました。> –

6

__dict__は、オブジェクトの属性が格納される場所です。 Dictsのアイテムは属性ではなく、アイテムです。ほとんどの辞書にはデータ属性はありません。

BTW:サブクラス化dictは、達成しようとしていることに応じて、正しく行うのが難しいです。たとえば、__setitem__メソッドをオーバーライドできますが、updateメソッドは使用しません。

1

__dict__は、属性のためです:

>>> class D(dict): 
    pass 

>>> d=D() 
>>> d.__dict__ 
{} 
>>> d.x=5 
>>> d.__dict__ 
{'x': 5} 
関連する問題