1

クラスを使用してディクショナリに複数のインスタンスを作成する場合、それらの属性は一意ではありません。それぞれに独自の属性を持たせてほしい。これはどうやるんですか?

コード:

class a(object):

    attr_a = {}

    def __init__(self, a={}):

        self.attr_a = a

if __name__ == '__main__':

    b = a()
    c = a()
    b.attr_a['abc'] = 'abc'
    c.attr_a['abc'] = 'def'

    print(b.attr_a)
    print(c.attr_a)

結果:

{'abc': 'def'}
{'abc': 'def'}

求められた結果:

{'abc': 'abc'}
{'abc': 'def'}
4

1 に答える 1

2

ここでの2つの問題:

1)インスタンスレベルの属性の場合、クラスレベルの属性とは対照的に、クラスレベルで宣言しないでください。したがって、attr_a = {}クラスからを削除します。

2)デフォルト値a={}は、インスタンス作成/関数呼び出し時ではなく、クラス/関数宣言時に評価されるため、デフォルト値として可変オブジェクトを使用することはめったにありません。これにより、デフォルト値で作成されたクラスのすべてのインスタンスがa同じattr_adictを共有します。デフォルト値として使用し、代わりに次のようa=Noneに内部でインスタンス化する必要があります。__init__

def __init__(self, a=None):
        self.attr_a = a or {}
于 2013-02-18T03:43:27.957 に答える