Почему оператор! = Не вызывает мой метод __neq__? - PullRequest
0 голосов
/ 24 апреля 2018

Я попытался реализовать некоторый подстановочный класс, который сравнивается равным любой строке, но ложен с чем-либо еще.Однако оператор != не вызывает моего участника __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 голосов
/ 24 апреля 2018

Для переопределения != вам нужно определить __ne__, но вы определили __neq__.

Так что вы должны изменить

def __neq__(self, o):

до

def __ne__(self, o):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...