Как определить, что классы не равны друг другу - PullRequest
0 голосов
/ 04 ноября 2019

Я не уверен, как определить, что классы, которые наследуются от других классов, не равны.

Я пытался использовать isinstance, чтобы сделать это, но я не очень хорошо разбираюсь в этом методе.

class FarmAnimal:

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

    def __str__(self):
        return "{} ({})".format(self, self.age)
from src.farm_animal import FarmAnimal
class WingedAnimal(FarmAnimal):

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

    def make_sound(self):
        return "flap, flap"
from src.winged_animal import WingedAnimal

class Chicken(WingedAnimal):

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

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

    def make_sound(self):
        return WingedAnimal.make_sound(self) + " - cluck, cluck"
from src.chicken import Chicken
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 not isinstance(other, Duck):
            return NotImplemented
        return self.age == other.age


if __name__ == "__main__":

    print(Chicken(2.1) == Duck(2.1))

Итак, в основном методе он говорит print (Chicken (2.1) == Duck (2.1)) и печатает True, но так как это разные классы, я хочу еговернуть Ложь. Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 04 ноября 2019

Вы можете определить свой метод __eq__ в FarmAnimal, проверяя, совпадает ли класс self с классом other:

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

, и вы не 'Вы должны написать конкретные __eq__ методы в ваших подклассах.

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