Есть ли способ сравнить два разных класса и вернуть False, если они не совпадают - PullRequest
0 голосов
/ 03 ноября 2019

Мне дают разных сельскохозяйственных животных и их возраст, и я хочу знать, как сравнивать классы, которые отличаются и возвращают False, если они есть.

Я пытался вернуть not __eq__, но это некажется, не работает хорошо.

from src.winged_animal import WingedAnimal
class Duck(WingedAnimal):

    def __init__(self, age):
        WingedAnimal.__init__(self, age)


    def make_sound(self):
        return WingedAnimal.make_sound(self) + " - quack, quack"

    def __eq__(self, other):
        if self.age == other.age:
            return True
        else:
            return False

    def __ne__(self, other):
        if self.age is not other.age:
            return True
        else:
            return False

Так что если дано Chicken(2) == Duck(2), я хочу вернуть False, так как классы разные.

1 Ответ

0 голосов
/ 03 ноября 2019

Вам нужно явно набрать check, потому что в противном случае тип утки (неудачное имя в этом случае) означает, что все с age, имеющим то же значение, равно:

class Duck(WingedAnimal):

    # No need to implement __init__ when it does nothing but delegate to superclass; that works automatically

    def make_sound(self):
        return super().make_sound() + " - quack, quack"

    def __eq__(self, other):
        if not isinstance(other, Duck):
            return NotImplemented  # Becomes False if other side also returns NotImplemented
        return self.age == other.age  # No need to test and explicitly return True/False

    # No need to implement __ne__; on Python 3, it's automatically implemented in terms of __eq__
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...