繁体   English   中英

Python:子类化元组和运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM