我有几个类,我想在每个类中添加一个属性(它的md5哈希值),并在初始化该类的对象时计算该哈希值,否则维护该类的其他所有内容。有没有比在python中更优雅的方法为我想要更改初始化并添加属性的所有类创建子类?
答案 0 :(得分:0)
您可以添加属性并动态覆盖__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()
动态创建子类以进一步减少样板,但代码的清晰度将是我的第一个问题。