[英]Python: subclassing tuples and operators
我是元组的子类。 我想覆盖相等的方法。 它似乎没有工作。 这是我最小的工作示例:
class OPS(tuple):
def __new__(self, data):
self=tuple(data)
return self
def __eq__(A,B):
print 'Hi'
return True
O1=OPS([1,2,3])
O2=OPS([1,2,4])
O1==O2
当它应该打印'Hi'
然后返回True
时返回False
。 关于我做错了什么的任何想法? 我打赌它很愚蠢,但我很茫然。
问题在于你的__new__
方法正在创建你的对象。 您将返回常规tuple
实例,而不是子类的实例,因此您编写的__eq__
方法将永远不会被调用。
尝试将__new__
更改为:
def __new__(cls, data):
self = super(OPS, cls).__new__(cls, data)
return self
此版本返回的self
值将是OPS
实例。
您正在__new__
中返回一个tuple
实例,而不是OPS
的实例。 但是,在这种情况下,您可以跳过覆盖__new__
,因为您没有更改输入参数(在这种情况下,由于tuple
是不可变类型,因此需要__new__
)。 这按预期工作,例如:
class OPS(tuple):
def __eq__(self, other):
return True
o1 = OPS([1,2,3])
o2 = OPS([1,2,4])
print o1 == o2
那是因为你在OPS类中覆盖了==,而O1和O2有元组类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.