python valuetype hash mixin

时间:2012-07-30 11:38:38

标签: python equality mixins

在Python中,我经常发现自己必须为等式应该基于特定数据的类重写等式和散列。我通常最终将这个抽象为这样的超类,但我想知道Python是否有这样的内置。这似乎是一个常见的任务。

class ValueType(object):
    def __init__(self, *args, **kwargs): super(ValueType, self).__init__(*args, **kwargs)
    def __eq__(self, other): return self._key() == other._key()
    def __ne__(self, other): return self._key() != other._key()
    def __hash__(self): return hash(self._key())    

1 个答案:

答案 0 :(得分:0)

据我所知,答案是否定的(基于使用Python的两年),但这几乎无法证明。

实际上,我不确定我会像你那样使用ABC。将它用作mixin可能更有意义,让您清楚地删除 init 。 Python没有明确支持mixins,但它支持多重继承,因此实现起来很简单。假设存在协议,您将需要查找Python方法解析顺序(MRO)并确保正确排序。 (在这种情况下,ValueType应该在object之前。)