次のように、「計算された」名前でクラス属性を定義する場合:
class C(object):
for name in (....):
exec("%s = ..." % (name,...))
exec を使用する以外に、多数の属性定義を処理する別の方法はありますか? クラスの構築中に C が定義されていないため、 getattr(C, name) は機能しません...
次のように、「計算された」名前でクラス属性を定義する場合:
class C(object):
for name in (....):
exec("%s = ..." % (name,...))
exec を使用する以外に、多数の属性定義を処理する別の方法はありますか? クラスの構築中に C が定義されていないため、 getattr(C, name) は機能しません...
どうですか:
class C(object):
blah blah
for name in (...):
setattr(C, name, "....")
つまり、定義後に属性設定を行います。
クラス全体が「計算」されている場合は、type
callable をお勧めします。これは、元のコンテナーが 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
はメタクラスです =)