1

オブジェクトの属性に関する Python の質問があります。コード:

>>> class A(object):
...   dict = {}
...   def stuff(self, name):
...     self.dict[name] = 'toto'
... 
>>> a = A()
>>> print a.dict
{}
>>> a.stuff('un')
>>> print a.dict
{'un': 'toto'}
>>> b = A()
>>> print b.dict
{'un': 'toto'}

私は PHP 開発者であり、PHPrint b.dictでは{}. aPython が と の間でこの属性を共有するのはなぜbですか? 新しいインスタンス化で新しくなるクラス属性を定義する方法は何ですか?

4

1 に答える 1

3

インスタンス属性ではなく、クラス属性を作成しました。ディクショナリは変更可能で、インスタンスから、またはクラスで直接変更できますが、クラス属性は定義によりすべてのインスタンス間で共有されます。

__init__代わりに、メソッドで新しい空の辞書を作成します。

class A(object):
    def __init__(self):
        self.dict = {}

    def stuff(self, name):
        self.dict[name] = 'toto'
于 2013-11-07T12:35:30.323 に答える