====Полиморфизм====
**Полиморфизм** является возможностью использовать один и тот же интерфейс для различных базовых форм, таких как типы данных или классы. Это позволяет функции использовать объекты разных типов в разные моменты времени.
Для того, чтобы использовать полиморфизм, мы собираемся создать два различных класса для использования с двумя различными объектами. Каждый из этих различных классов должен иметь интерфейс, в общем, так что они могут быть использованы полиморфно, поэтому мы дадим им методы, которые отличаются, но имеют такое же имя.
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.
Используется для доступа к базовым реализациям наследуемых методов, перекрытых в классе-наследнике.