为什么!=运算符不会调用我的'__neq__'方法?

时间:2018-04-24 12:08:51

标签: python methods comparison-operators

我试图实现一些比较等于任何字符串的通配符类,但是对其他任何字符串都是false。但是,!=运算符似乎没有按预期调用我的__neq__成员:

class A(str):
    def __cmp__(self, o):
        return 0 if isinstance(o, str) else -1

    def __eq__(self, o):
        return self.__cmp__(o) == 0

    def __neq__(self, o):
        return self.__cmp__(o) != 0

a = A()
b = 'a'
print(a == b) # Prints True, as expected
print(a != b) # Prints True, should print False

我做错了什么?

1 个答案:

答案 0 :(得分:13)

要覆盖!=,您需要定义__ne__,但您定义了__neq__

所以你必须改变

def __neq__(self, o):

def __ne__(self, o):