4

インターフェイスのすべての属性に属性を追加する必要があります。そのため、動的に変更して追加しようとしていますが、今のところあまり成功していません。

次のインターフェースがあるとしましょう:

class IMember(Interface):
    first_name = schema.TextLine(title=u'first name')
    last_name = schema.TextLine(title=u'last name')

そして、私はそれを次のように変更したいと思います:

class IMember(Interface):
    first_name = schema.TextLine(title=u'first name')
    last_name = schema.TextLine(title=u'last name')
    visbility_first_name = schema.Bool(title=u'Display: first name')
    visbility_last_name = schema.Bool(title=u'Display: last name')

その後、クラスを修正してみましたが、すでに初期化されているため、スキーマが設定されており、変更方法がわかりませんでした。ディレクティブ (例: interface.Implements()) を書くことも考えましたが、属性を追加するだけではかなり複雑に思えます。

最終的な目標は、一連の Bool ウィジェットを含む z3c.form フィールドセットを追加することです。

それで、Pythonでそれを行う方法はありますか、それともインターフェイスを変更してすべての属性を手動で追加する必要がありますか?

ありがとう !

4

2 に答える 2

0

Pythonのメタクラスを使いたいようです。カスタム メタクラスを使用すると、クラスの作成を変更できるため、クラスの作成時または作成前に属性を動的に追加または変更できます。メタクラスに関する優れた SO 回答については、この投稿を参照してください。

ただし、メタクラスを使用する必要がないように、プログラムを再構築するようにしてください。通常、これらは本当に必要であることがわかっている場合にのみ使用してください。あなたの場合、schema.TextLine(おそらくフックを追加することによって) 必要な動作を許可するように変更することは可能ですか?

于 2013-08-08T15:14:26.057 に答える