Полиморфизм является возможностью использовать один и тот же интерфейс для различных базовых форм, таких как типы данных или классы. Это позволяет функции использовать объекты разных типов в разные моменты времени.
Для того, чтобы использовать полиморфизм, мы собираемся создать два различных класса для использования с двумя различными объектами. Каждый из этих различных классов должен иметь интерфейс, в общем, так что они могут быть использованы полиморфно, поэтому мы дадим им методы, которые отличаются, но имеют такое же имя.
app/lessonImport41/Person.py
class Person: outString = '' def __init__(self, name = 'Серега', age = 18): self.name = name self.age = 20 # инкапсуляция типа private def printInfo(self): self.outString = f'Зовут {self.name} ему {self.age} лет' return self def print(self): print(self.outString) def __str__(self): ''' Переопределяем метод из глобального класса В данном случаем выводим название класса в которм будеи вызван метод ''' return f'Name: {self.__class__}'
app/lessonImport41/Employee.py
from app.lessonImport41.Person import Person class Employee(Person): def __init__(self, name, age, company): super().__init__(name, age) self.company = company def printInfo(self): super().printInfo() self.outString += f' компания {self.company}' return self
В приведенном выше коде, классы Person и Employee имеют два метода с тем же общем именем. Тем не менее, каждая функциональная возможность этих методов различны для каждого класса
from app.lessonImport41.Employee import Employee employee = Employee('Женя', 30, 'Ашан') employee.printInfo().print() print(employee.__str__())
Результат:
Зовут Женя ему 20 лет компания Ашан Name: <class 'app.lessonImport41.Employee.Employee'>
озвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа.
super([type[, object-or-type]])
type : Тип, от которого следует начать поиск объекта-посредника. 3.0 Ранее атрибут был обязателен.
obj-or-type : Если не указан, возвращается несвязанный объект-посредник. Если атрибут является объектом, то будет получен посредник для получения метода объекта, для которого isinstance(obj, type) возвращает True. Если атрибут является типом, то будет получен посредник для получения метод класса, для которого issubclass(subtype, type) возвращает True.
Используется для доступа к базовым реализациям наследуемых методов, перекрытых в классе-наследнике.