我有一个 python 类(实际上它是一个 Google App Engine 模型),它看起来像这样:
class MyClass(ParentClass):
variable_one = PropertyClass(...)
variable_two = PropertyClass(...)
我打算建立一个系统来描述这个类的两个实例之间的差异,这些实例代表不同时间点实体的两个版本。最终它会产生一个像
"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。无论如何,我不确定我会怎么写。
一种选择似乎是扩展 PropertyClass ...
class MyClass(ParentClass):
variable_one = MyPropertyClass("Variable One", ...)
variable_two = MyPropertyClass("Variable Two", ...)
但是有几个不同的属性类被使用,我想为它们添加一个共同的行为,所以这似乎太费力了。
我想我可以定义一个字典:
class MyClass(ParentClass):
variable_one = PropertyClass(...)
variable_two = PropertyClass(...)
variable_display_names = {
"variable_one": "Variable One",
"variable_two": "Variable Two"
}
但我希望听到一些更有经验的pythoners关于实现这一目标的最佳最pythonic方式。