====Полиморфизм==== **Полиморфизм** является возможностью использовать один и тот же интерфейс для различных базовых форм, таких как типы данных или классы. Это позволяет функции использовать объекты разных типов в разные моменты времени. Для того, чтобы использовать полиморфизм, мы собираемся создать два различных класса для использования с двумя различными объектами. Каждый из этих различных классов должен иметь интерфейс, в общем, так что они могут быть использованы полиморфно, поэтому мы дадим им методы, которые отличаются, но имеют такое же имя. 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: ---- ====super()==== озвращает объект-посредник (прокси), делегирующий вызовы методов родителю или собрату класса указанного типа. super([type[, object-or-type]]) **type** : Тип, от которого следует начать поиск объекта-посредника. 3.0 Ранее атрибут был обязателен. **obj-or-type** : Если не указан, возвращается несвязанный объект-посредник. Если атрибут является объектом, то будет получен посредник для получения метода объекта, для которого %%isinstance(obj, type)%% возвращает True. Если атрибут является типом, то будет получен посредник для получения метод класса, для которого %%issubclass(subtype, type)%% возвращает True. Используется для доступа к базовым реализациям наследуемых методов, перекрытых в классе-наследнике.