Примеры полиморфизма

Пример полиморфизма на основе метода:

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

class Cat:
    def sound(self):
        return "Meow!"

def make_sound(animal):
    return animal.sound()

my_dog = Dog()
my_cat = Cat()

print(make_sound(my_dog))  # Вывод: Woof!
print(make_sound(my_cat))  # Вывод: Meow!

Здесь метод sound у каждого класса (Dog и Cat) имеет одно и то же имя, что позволяет использовать их полиморфно в функции make_sound.

Пример полиморфизма на основе класса:

class Shape:
    def area(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return 3.14 * self.radius ** 2

class Rectangle(Shape):
    def __init__(self, length, width):
        self.length = length
        self.width = width

    def area(self):
        return self.length * self.width

def calculate_area(shape):
    return shape.area()

circle = Circle(5)
rectangle = Rectangle(4, 6)

print(calculate_area(circle))  # Вывод: 78.5
print(calculate_area(rectangle))  # Вывод: 24

Здесь полиморфизм проявляется в том, что оба объекта (Circle и Rectangle) могут быть использованы в функции calculate_area, несмотря на разные классы.

Пример полиморфизма на основе переменной:

class Car:
    def fuel_efficiency(self):
        return 20  # Мили на галлон

class Bicycle:
    def fuel_efficiency(self):
        return "N/A"  # Велосипед не использует топливо

def print_fuel_efficiency(vehicle):
    print(f"Fuel efficiency: {vehicle.fuel_efficiency()} MPG")

my_car = Car()
my_bicycle = Bicycle()

print_fuel_efficiency(my_car)  # Вывод: Fuel efficiency: 20 MPG
print_fuel_efficiency(my_bicycle)  # Вывод: Fuel efficiency: N/A MPG

В этом примере полиморфизм основан на переменной vehicle, которая может ссылаться как на объект класса Car, так и на объект класса Bicycle. Обе переменные вызывают метод fuel_efficiency полиморфно.

Last updated