Предметы, о которых вы говорите, используются как метаклассы [Python -doc] . Можно сказать, что метакласс является типом типа. Если мы, например, взглянем на ModelBase
кодекс источника [GitHub] , мы увидим:
class ModelBase(<b>type</b>):
"""Metaclass for all models."""
def __new__(cls, name, bases, attrs, **kwargs):
super_new = super().__new__
# …
Это так наследуется от type
, который является базовым c базовым классом мета-классов.
Здесь, таким образом, "self" объект - это сам класс, который анализируется, обновляется и т. д. c. Хотя по сути нет необходимости использовать cls
, обычно в мета-классах то, что было бы self
из обычного класса, называется cls
в определении мета-класса , чтобы подчеркнуть тот факт, что мы сами манипулируем объектом класса.