У меня проблемы с печатью того, что мне нужно с наследованием, используя OOP - PullRequest
0 голосов
/ 27 февраля 2020

Мой код выглядит следующим образом:

class Animal:
    def __init__(self, Animal):
        print(Animal, "is an animal.")

class Mammal(Animal):
    def __init__(self, mammalName):
        print(mammalName, "is a warm-blooded animal")
        super().__init__(mammalName)

class NonWingedMammal(Mammal):
    def __init(self, NonWingedMammal):
        print(NonWingedMammal, "can't fly") 
        super().__init__(NonWingedMammal)

NonWingedMammal("Dog")

Когда я запускаю это, я ожидаю вывод

Dog can't fly
Dog is a warm-blooded animal
Dog is an animal.

Однако я получаю следующий вывод:

Dog is a warm-blooded animal
Dog is an animal.
<__main__.NonWingedMammal at 0x7fc340fee490>

Я бы подумал, что Dog can't fly был бы частью моего вывода, потому что порядок поиска идет от производного класса до базовых классов - но, похоже, он пропустил производный класс? Очевидно, я что-то здесь упустил, но не могу понять, что!

1 Ответ

0 голосов
/ 27 февраля 2020
class NonWingedMammal(Mammal):
    def __init(self, NonWingedMammal):
        print(NonWingedMammal, "can't fly") 
        super().__init__(NonWingedMammal)
  1. NonWingedMammal init пропускает окончание __
  2. Вы не должны называть параметр таким же, как класс

Из-за опечатки в init, когда вы делаете NonWingedMammal("Dog"), вы на самом деле не называете то, что написали - потому что это не __init__. Следовательно, вы вызываете значение по умолчанию __init__ - , которое наследуется родительским init , давая вывод:

Dog is a warm-blooded animal
Dog is an animal.

Строка <__main__.NonWingedMammal at 0x7fc340fee490> на самом деле не выводится - она ​​отображается только в интерактивном переводчике. Или, если вы делаете print(NonWingedMammal("Dog").

Fix: __init( -> __init__(

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