Метаклассы и аннотации
Это две совсем разные темы, если что).
Метаклассы
Хороший пример real-life кода на Python, эксплуатирующий метаклассы и многое другое: enum (в частности, How are Enums different?)
- Класс можно создать просто функцией (а можно и декоратором)
- От класса можно унаследоваться и всё модифицировать в потомке
TODO but why then?
Создание класса с помощью type(name, bases, dict)
это вырожденный вызов type("имя", (кортеж родителей), {пространство имён})
1 C = type("C", (), {})
- Например,
Но type — это просто класс такой ⇒ от него можно унаследоваться, например, перебить ему __init__():
а вот это Boo = overtype… можно записать так:
(по сути, class C: — это class C(metaclass=type):)
__call__() → (__prepare__() для автоматического создания пространства имён, если есть), __new__(), __init__()
определённые правила для __init__() и __new__()
Не путать с наследованием!