1

だから私は自分がやりたいことが可能かどうかを考えようとしています。アプリケーションのテストコードを作成していますが、製品のインターフェイスにある要素の一部を表すプロパティを含むオブジェクトがあります。私がやりたいのは、アプリケーションランナーとデータオブジェクトを新しいクラスに渡し、データオブジェクトのプロパティのサブセットに基づいてアクセサープロパティのセットを動的に生成できるようにすることです。これまでの私の考え:

  1. インターフェイスから追加情報を抽出するために必要なメタデータを含むプロパティのサブクラスを作成します
  2. 既存のデータオブジェクトをリファクタリングして、UIの関連フィールドに新しいプロパティサブクラスを使用します
  3. UIドライバーオブジェクトとデータオブジェクトを受け入れる新しいジェネレータークラスを作成します。
    • データオブジェクトを反映して、新しいプロパティサブクラスタイプのすべてのメンバーのリストを取得します
    • プロパティサブクラスのメタデータに基づいてUIからジェネレータークラスインスタンスのメンバーに情報を格納します(使用を計画していますsetattr
    • 実行時にプロパティを作成して、(b)で作成されたメンバーを読み取り専用にし、既存のコードと整合性のあるインターフェイスを提供します(つまり、.[name]の代わりにを使用します.[name]()

ステップ3cを除いて、すべてがわかったと思います。実行時にプロパティを動的に作成する方法はありますか?どんな助けでも大歓迎です。

4

1 に答える 1

0

それがあなたが望むものかどうかわかりません。ただし、 getattrおよびsetattrメソッドを使用して、動的な読み取り専用プロパティを定義できます。次に例を示します。

class X(object):
    data = {'x' : 123, 'y' : 456}
    def __getattr__(self, name):
        if name in self.data:
            return self.data[name]
        raise AttributeError(name)

    def __setattr__(self, name, value):
        if name in self.data:
            return None
        return super(X, self).__setattr__(name, value)

a = X()
print a.x, a.y
a.x = 0
print a.x
于 2011-06-30T18:41:05.280 に答える