クラスは「計算」の名前を持つ属性
-
06-09-2019 - |
質問
クラスを定義することにように、「計算された」名前によって属性ときます:
class C(object):
for name in (....):
exec("%s = ..." % (name,...))
のexecを使用するよりも、多くの属性の定義を処理する別の方法はありますか? Cが定義されていないので、GETATTR(C、名前は)クラスの構築時に、動作しません...
解決
いかがます:
class C(object):
blah blah
for name in (...):
setattr(C, name, "....")
これは定義の後に属性設定を行い、である。
他のヒント
class C (object):
pass
c = C()
c.__dict__['foo'] = 42
c.foo # returns 42
あなたの全体のクラスは「計算」されている場合は、
、その後、私は呼び出し可能type
を提案することができます。あなたの元の容器が辞書だった場合、これは特に便利です。
d = dict(('member-%d' % k, k*100) for k in range(10))
C = type('C', (), d)
これは、あなた
と同じ結果を与えるだろうclass C(object):
member-0 = 0
member-1 = 100
...
あなたのニーズは本当に複雑な場合、、メタクラスを考えます。 (実際には、type
がのメタクラス=)
何、この目的のためにメタクラスを使用してはどうですか?
Pythonでのメタクラスは何かの?所属していません StackOverflow