Полиморфизм в ООП: объяснение принципа и примеры использования
Полиморфизм – это один из основных принципов объектно-ориентированного программирования. Он описывает способность объектов разных классов выполнять одни и те же действия по-разному.
В ООП полиморфизм означает, что объекты разных классов могут иметь одинаковые методы или свойства, но реализуемые ими операции будут отличаться. Таким образом, полиморфизм позволяет использовать объекты разных типов без необходимости знать о том, с каким именно объектом мы работаем.
Примеры кода:
1. Полиморфизм методов:
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
pet_list = [Dog("Buddy"), Cat("Fluffy")]
for pet in pet_list:
print(pet.speak())
Результат выполнения программы:
Woof!
Meow!
В данном примере мы создали базовый класс Animal, который имеет метод speak, но не реализует его. Затем мы создали два класса-наследника Dog и Cat, которые переопределили метод speak и возвращают разные звуки. После этого мы создали список pet_list, который содержит объекты классов Dog и Cat. В цикле мы перебираем элементы pet_list и вызываем метод speak для каждого объекта.
2. Полиморфизм функций:
class Rectangle:
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
class Circle:
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
def print_area(shape):
print("The area is:", shape.area())
rect = Rectangle(5, 10)
circ = Circle(7)
print_area(rect)
print_area(circ)
Результат выполнения программы:
The area is: 50
The area is: 153.86
В этом примере мы создали два класса Rectangle и Circle, которые имеют метод area, возвращающий площадь фигуры. Затем мы определили функцию print_area, которая принимает объект любого класса, имеющего метод area, и выводит на экран его площадь. Мы создали два объекта rect и circ и передали их в функцию print_area.
Таким образом, полиморфизм в ООП позволяет более гибко использовать объекты разных классов, не заботясь о том, с каким именно объектом мы работаем. Это уменьшает зависимость между классами и повышает гибкость кода.