質問

クラスを定義することにように、「計算された」名前によって属性ときます:

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でのメタクラスは何かの?

質問100003をご覧ください。

scroll top