Виртуальный подкласс в ООП в Python
Иногда класс ведет себя как потомок абстрактного
родителя, но формально от него не наследует.
В Python такой класс можно зарегистрировать
методом register у абстрактного класса.
После регистрации isinstance считает
его объект виртуальным подклассом.
Пусть у нас есть абстрактный класс
Employee с методом get_salary:
from abc import ABC, abstractmethod
class Employee(ABC):
@abstractmethod
def get_salary(self):
pass
Сделаем обычный класс Manager,
который не наследует Employee,
но имеет нужный метод:
class Manager:
def get_salary(self):
return 2000
Зарегистрируем Manager как виртуальный
подкласс и проверим isinstance:
Employee.register(Manager)
manager = Manager()
print(isinstance(manager, Employee)) # выведет True
Сделайте абстрактный класс Employee
с абстрактным методом get_name.
Сделайте класс Guest без наследования
от Employee, но с методом
get_name. Зарегистрируйте
Guest через register
и проверьте isinstance для объекта
Guest.