「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 辞書エントリなどの動的プロパティをクラスに追加するにはどうすればよいですか?

辞書エントリなどの動的プロパティをクラスに追加するにはどうすればよいですか?

2024 年 11 月 8 日に公開
ブラウズ:791

How to Add Dynamic Properties to Classes like Dictionary Entries?

クラスへの動的プロパティの追加

モック クラスを使用してデータベースの結果セットをシミュレートしようとすると、動的プロパティをどのように割り当てるかという課題が生じます。辞書のプロパティに似たプロパティをインスタンスに追加します。これには、特定の値を持つ属性のように動作するプロパティの作成が含まれます。

当初、有望なアプローチには、

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 システムの配管を効果的に公開します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3