Jes*_*cia 2 python oop tuples subclass 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
Run Code Online (Sandbox Code Playgroud)
它返回False,当它应该打印'Hi',然后再返回True.关于我做错了什么的任何想法?我打赌它很愚蠢,但我很茫然.
问题在于您的__new__方法是创建对象.您正在返回常规tuple实例,而不是子类的实例,因此__eq__您永远不会调用您编写的方法.
尝试更改__new__为:
def __new__(cls, data):
self = super(OPS, cls).__new__(cls, data)
return self
Run Code Online (Sandbox Code Playgroud)
self此版本返回的值将是一个OPS实例.
小智 5
您正在返回tuple实例__new__,而不是实例OPS.但是,__new__在这种情况下,您可以跳过覆盖,因为您没有更改输入参数(在这种情况下__new__,由于tuple是不可变类型,因此需要).这按预期工作,例如:
class OPS(tuple):
def __eq__(self, other):
return True
o1 = OPS([1,2,3])
o2 = OPS([1,2,4])
print o1 == o2
Run Code Online (Sandbox Code Playgroud)