0

ここで、自己を介してクラス属性を一括更新するという提案を見つけました。dict .upadte だから私は試しました

class test(object):
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)
    def update(self, **kwargs):
        self.__dict__.update(kwargs)

d = {'a':1,'b':2,'c':3}

c = test(d)

そして同様に

c = test()
c.update(d)

しかし、私はエラーが発生します

TypeError: __init__() takes exactly 1 argument (2 given)

これが機能しない理由を誰かに教えてもらえますか? 乾杯C.

4

3 に答える 3

6

値を正しく渡していないためです。

c = test(**d)
于 2013-05-20T18:56:29.323 に答える
1

次のような kwargs の使用法:

c = test()
c.update(**d)
于 2013-05-20T18:56:37.190 に答える
0

test(d)最初の位置引数として d を test のコンストラクターに渡します (インスタンス変数自体の後)。test.__init__キーワード引数のみで、位置引数は取りません。他の人が指摘したように、を使用してtest(**d)ください。

于 2013-05-20T20:11:18.170 に答える