2009-05-26 13 views
3

と属性? Cが定義されていないので、GETATTR(C、名前が)...クラスの構築時に、動作しませんクラスは「計算」名前

+1

BTW:あなたのタグ "コンパイル時"は、Pythonの質問では嫌です。編集は本当に重要な考慮事項ではありません。これは、コードのコンパイルではなく、クラスを定義することです。これは直交問題です。 –

+0

@Ned:そうです。この例のコードはコンパイル時にのみ実行されるため、「コンパイル時」タグを使用しました。技術的には、それは遅れて実行される可能性があり、クラスを定義する必要性は依然として残っています。 – EOL

答えて

11

方法について:

ある
class C(object): 
    blah blah 

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

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

3
class C (object): 
    pass 

c = C() 
c.__dict__['foo'] = 42 
c.foo # returns 42 
+0

ネッドの答えは良いです:) – Dan

+0

あなたのフェアプレーのための+1、ダン。 :) – EOL

2

クラス全体が計算されている場合は、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メタクラス=)

+0

これは、識別子にハイフン - マイナス文字を含めることができないため、通常のPython構文を使用してアクセスできない属性名になります。この例では '_'を使用する方が良いでしょう。 – gerrit

関連する問題