3

次のように、「計算された」名前でクラス属性を定義する場合:

class C(object):
    for name in (....):
        exec("%s = ..." % (name,...))

exec を使用する以外に、多数の属性定義を処理する別の方法はありますか? クラスの構築中に C が定義されていないため、 getattr(C, name) は機能しません...

4

4 に答える 4

11

どうですか:

class C(object):
    blah blah

for name in (...):
    setattr(C, name, "....")

つまり、定義後に属性設定を行います。

于 2009-05-26T20:03:41.027 に答える
2

クラス全体が「計算」されている場合は、typecallable をお勧めします。これは、元のコンテナーが dict である場合に特に役立ちます。

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 メタクラスです =)

于 2009-05-27T06:28:22.083 に答える