Python по своей природе гибок, и любой объект может быть базовым классом, если он выглядит как базовый класс. Как всегда в случае с Python, это означает реализацию некоторых атрибутов, которые ожидаются найти в классах Python.
Класс Interface (или его основание Specification and Element) устанавливает несколько. Ищите любые переменные, начинающиеся с двойного подчеркивания (__
), чтобы получить понимание:
__module__
: строка, содержащая модуль пути Python.
__name__
: имя, под которым был определен класс.
__bases__
: базовые классы этого класса.
__doc__
: (необязательно) Строка документации класса.
Кроме того, метод InterfaceClass __init__
будет вызываться при использовании в качестве базового класса; В основном Python рассматривает базовые классы как метаклассы, и каждый раз, когда мы используем его в определении класса, будет создан новый экземпляр класса базового класса (метакласс). Это означает, что методу __init__
будут переданы новые значения __name__
и __bases__
, а также все новые атрибуты класса в качестве аргументов ключевых слов (включая __module__
и необязательный __doc__
).
Все это задокументировано в разделе Стандартная иерархия типов документа модели данных Python (ищите абзац "классы" по специальным атрибутам) и в того же документа в пользовательской настройке. секция создания класса (базовые классы с атрибутом __class__
считаются типом).
Итак, любой экземпляр Python, который определяет как минимум атрибуты __module__
, __name__
и __bases__
, а подходящий метод __init__
будет работать в качестве базового класса для других классов. Python делает все остальное.