次のようなpythonクラス(実際にはGoogle App Engineモデル)があります:
class MyClass(ParentClass):
variable_one = PropertyClass(...)
variable_two = PropertyClass(...)
異なる時点でのエンティティの 2 つのバージョンを表す、このクラスの 2 つのインスタンスの違いを記述できるシステムを構築するつもりです。最終的には次のような文字列が生成されます
"Variable One changed from 'foo' to 'bar', Variable Two changed from empty to 'baz'"
そのため、「variable_one」が「Variable One」として表示されるという事実をどこかに保存する必要があります。C# のバックグラウンドを持つ私の本能は、次のように属性を使用することです。
class MyClass : ParentClass
{
[DisplayName("Variable One")]
public PropertyClass variable_one;
[DisplayName("Variable Two")]
public PropertyClass variable_two;
}
最初は、python に相当するものはデコレータのように見えます。
class MyClass(ParentClass):
@display_name("Variable One")
variable_one = PropertyClass(...)
@display_name("Variable Two")
variable_two = PropertyClass(...)
ただし、デコレータは実際には関数のカリー化を行っており、クラス変数の定義は PropertyClass のインスタンスを variable_one と variable_two に割り当てているだけなので、有効な Python とは思えません。いずれにせよ、私はそれをどのように書くべきかわかりません。
1つのオプションは、PropertyClassを拡張することです...
class MyClass(ParentClass):
variable_one = MyPropertyClass("Variable One", ...)
variable_two = MyPropertyClass("Variable Two", ...)
しかし、いくつかの異なるプロパティ クラスが使用されており、それらすべてに 1 つの共通の動作を追加したいので、これは手間がかかりすぎるように思えます。
辞書を定義できると思います:
class MyClass(ParentClass):
variable_one = PropertyClass(...)
variable_two = PropertyClass(...)
variable_display_names = {
"variable_one": "Variable One",
"variable_two": "Variable Two"
}
しかし、これを達成するための最もPython的な方法について、経験豊富なpythonersから聞いてみたいと思っています。