Этот вопрос проверяет понимание принципа полиморфизма, который позволяет объектам разных классов использовать одинаковый интерфейс.
Полиморфизм — это возможность объектов разных классов использовать методы с одинаковыми именами, предоставляя разное поведение. В Python это достигается через переопределение методов (method overriding) или динамическую типизацию (duck typing).
Полиморфизм позволяет вызывать одинаковые методы на объектах разных классов, и каждый объект реализует своё поведение. В Python это реализуется через:
Переопределение методов: подкласс предоставляет свою реализацию метода, определённого в родительском классе.
"Утиная типизация" (duck typing): объект рассматривается по его поведению, а не типу.
Пример с переопределением:
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof"
class Cat(Animal):
def speak(self):
return "Meow"
def animal_sound(animal):
print(animal.speak())
animal_sound(Dog()) # Woof
animal_sound(Cat()) # Meow
Пример утиной типизации:
class Bird:
def fly(self):
print("I can fly")
class Plane:
def fly(self):
print("I can fly too!")
def make_fly(obj):
obj.fly()
make_fly(Bird()) # I can fly
make_fly(Plane()) # I can fly too!