Python子类化:添加属性

时间:2014-06-29 16:52:38

标签: python class design-patterns subclass

我有几个类,我想在每个类中添加一个属性(它的md5哈希值),并在初始化该类的对象时计算该哈希值,否则维护该类的其他所有内容。有没有比在python中更优雅的方法为我想要更改初始化并添加属性的所有类创建子类?

1 个答案:

答案 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()动态创建子类以进一步减少样板,但代码的清晰度将是我的第一个问题。