24

C# のように、Python で匿名クラス インスタンスを作成する必要がある場合があります。

var o= new {attr1="somehing", attr2=344};

しかし、Pythonでは次のようにします:

class Dummy: pass
o = Dummy()
o.attr1 = 'something'
o.attr2 = 344
#EDIT 1
print o.attr1, o.attr2

単一のステートメントでpythonicな方法でそれを行うにはどうすればよいですか?

4

5 に答える 5

37
o = type('Dummy', (object,), { "attr1": "somehing", "attr2": 344 })
o.attr3 = "test"
print o.attr1, o.attr2, o.attr3
于 2012-12-15T23:43:16.587 に答える
9

Python 3.3 以降を使用している場合は、types.SimpleNamespaceを使用できます。

from types import SimpleNamespace

o = SimpleNamespace(attr1="something", attr2=344)
print(o)

# namespace(attr1='something', attr2=344)
于 2016-11-30T17:44:27.123 に答える
2
class attrdict(dict):
    def __getattr__(self, key):
        return self[key]

o = attrdict(attr1='something', attr2=344)

o.attr1

しかし、おそらく標準の辞書を使用する必要があるようです。

于 2012-12-15T23:39:36.103 に答える
0

私は mwhite からの dict の回答を好みますが、kwargs の「魔法」を使用して過去に行った方法を次に示します (しゃれが意図されています)。

class ObjectFromDict(object):
    def __init__(**kwargs):
        for k in kwargs:
            if k not in self.__dict__:
                setattr(k,v)

myObj = ObjectFromDict(**{'foo': 'bar', 'baz': 'monkey'})
print myObj.foo #bar
于 2012-12-15T23:43:19.533 に答える