在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())
答案 0 :(得分:0)
据我所知,答案是否定的(基于使用Python的两年),但这几乎无法证明。
实际上,我不确定我会像你那样使用ABC。将它用作mixin可能更有意义,让您清楚地删除 init 。 Python没有明确支持mixins,但它支持多重继承,因此实现起来很简单。假设存在协议,您将需要查找Python方法解析顺序(MRO)并确保正确排序。 (在这种情况下,ValueType
应该在object
之前。)