Почему мой переопределенный метод не вызывается в цепочке наследования Python? [закрыто]Python

Программы на Python
Ответить
Anonymous
 Почему мой переопределенный метод не вызывается в цепочке наследования Python? [закрыто]

Сообщение Anonymous »

Я изучаю ООП Python и запутался с переопределением методов при наследовании.
У меня есть три класса: Animal, Dog и BabyDog.
переопределяет метод sound() из Animal, и я также пытаюсь переопределить его снова в BabyDog.

Но когда я вызываю sound() с использованием объекта BabyDog, вместо BabyDog выполняется метод Dog.
Вот мой код:

Код: Выделить всё

class Animal:
def sound(self):
return "Some generic sound"

class Dog(Animal):
def sound(self):
return "Woof!"

class BabyDog(Dog):
def sound():
return "Small woof!"

obj = BabyDog()
print(obj.sound())
Но это печатает: Я ожидал:

Код: Выделить всё

Small woof!
Я не понимаю:
  • Почему не используется переопределенный метод в BabyDog?
  • Связано ли это с сигнатурами методов или отсутствующим параметром self?
  • Как правильно переопределять методы при многоуровневом наследовании?
Может кто-нибудь объяснить, что я делаю неправильно и как Python решает, какой переопределенный метод использовать?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ance-chain
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»