2

クラスがあるとします:

class Foo(object):
    def __init__(self,d):
        self.d=d

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

inst=Foo(d)

inst.d
Out[315]: {'a': 1, 'b': 2}

各属性がdictキーになるn個の属性を動的に作成する方法はありますか?などinst.aを返し1ます。

4

5 に答える 5

3
class Foo(object):
    def __init__(self, attributes):
        self.__dict__.update(attributes)

それはそれをするでしょう。

>>>foo = Foo({'a': 42, 'b': 999})
>>>foo.a
42
>>>foo.b
999

setattr組み込みメソッドを使用することもできます。

class Foo(object):
    def __init__(self, attributes):
        for attr, value in attributes.iteritems():
            setattr(self, attr, value)
于 2012-10-09T19:09:05.257 に答える
2

使用setattr():

>>> class foo(object):
    def __init__(self, d):
        self.d = d
        for x in self.d:
            setattr(self, x, self.d[x])


>>> d = {'a': 1, 'b': 2}
>>> l = foo(d)
>>> l.d
{'a': 1, 'b': 2}
>>> l.a
1
>>> l.b
2
>>> 
于 2012-10-09T19:09:44.380 に答える
1

これは、pythonm が提供するものよりもさらに風変わりなソリューションです。

class Foo(object):
    def __init__(self, d):
        self.__dict__ = d

を使用する代わりに、直接inst.d使用してください。inst.__dict__追加の利点は、追加された新しいキーがd自動的に属性になることです。それはそれが得られるのと同じくらいダイナミックです。

于 2012-10-09T19:29:17.427 に答える
0

も使用できます__getattr__

class Foo(object):

    def __init__(self, d):
        self.d = d

    def __getattr__(self, name):
        return self.d[name]
于 2012-10-09T20:57:26.553 に答える
0

次のようなことができます。

class Foo(object):
    def __init__(self, **kwdargs):
        self.__dict__.update(kwdargs)

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

foo = Foo(**d)
foo2 = Foo(a=1, b=2)
于 2012-10-09T20:53:36.553 に答える