16

私はこのようなことをしようとしています:

property = 'name'
value = Thing()
class A:
  setattr(A, property, value)
  other_thing = 'normal attribute'

  def __init__(self, etc)
    #etc..........

setattrしかし、クラス定義で変数を割り当てるのと同じように動作させるためのクラスへの参照が見つからないようです。これどうやってするの?

4

4 に答える 4

16

これにはメタクラスを使用する必要があります。

property = 'foo'
value = 'bar'

class MC(type):
  def __init__(cls, name, bases, dict):
    setattr(cls, property, value)
    super(MC, cls).__init__(name, bases, dict)

class C(object):
  __metaclass__ = MC

print C.foo
于 2010-03-25T22:28:47.137 に答える
9

これは、そこに行っAたときにクラスが完全に初期化されていないことが原因である可能性がsetattr(A, p, v)あります。

class最初に試すことは、ブロックを閉じた後に settattr を下に移動し、それが機能するかどうかを確認することです。

class A(object):
    pass

setattr(A, property, value)

そうでなければ、Ignacio が metaclass について言ったばかりです。

于 2010-03-25T22:22:10.467 に答える