クラスへの動的プロパティの追加
モック クラスを使用してデータベースの結果セットをシミュレートする過程で、動的プロパティをどのように割り当てるかという課題が生じます。辞書のプロパティに似たプロパティをインスタンスに追加します。これには、特定の値を持つ属性のように動作するプロパティを作成することが含まれます。
当初、有望なアプローチには、
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
を使用してプロパティを割り当てることが含まれていました。しかし、これにより、望ましい動作ではなくプロパティ オブジェクトが生成されます。
解決策は、個々のインスタンスではなく、クラス自体にプロパティを追加することです。その仕組みは次のとおりです。
class Foo(object): pass foo = Foo() foo.a = 3 Foo.b = property(lambda self: self.a + 1) print(foo.b) # Prints 4
この例では、プロパティ記述子を使用して、クラス Foo にプロパティ b を追加します。 foo.b にアクセスすると、Python は記述子の __get__ メソッドを呼び出し、クラス インスタンスを引数として渡します。次に、__get__ メソッドは、self.a 1 として計算されるプロパティの値を返します。
プロパティは、属性のカスタム動作を定義する便利な方法を提供し、Python の OO システムの仕組みを効果的に公開します。
以上が辞書エントリなどの動的プロパティをクラスに追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。