Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpAbVs 136 of 174 menu
◀ ▶

Виртуальный подкласс в ООП в 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.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить