【问题标题】:Python subclassing: adding propertiesPython子类化:添加属性
【发布时间】:2014-06-29 16:52:37
【问题描述】:
我有几个类,我想为每个类添加一个属性(它的 md5 哈希值)并在初始化该类的对象时计算该哈希值,但除此之外维护该类的所有其他内容。在 python 中,有没有比为我想要更改初始化并添加属性的所有类创建一个子类更优雅的方法?
【问题讨论】:
标签:
python
class
design-patterns
subclass
【解决方案1】:
您可以添加属性并动态覆盖__init__:
def newinit(self, orig):
orig(self)
self._md5 = #calculate md5 here
_orig_init = A.__init__
A.__init__ = lambda self: newinit(self, _orig_init)
A.md5 = property(lambda self: self._md5)
但是,即使您使用的描述性名称比我在上面所做的更多,这也会变得相当混乱。所以我真的不推荐它。
Cleaner 可能是简单的子类化,如果您需要为多个类执行此操作,可能使用 mixin 类。您也可以考虑使用 type() 动态创建子类以进一步减少样板文件,但代码的清晰度将是我的首要考虑。