Django 类方法没有装饰器

Django classmethod doesn't have a decorator

我看到几个类方法没有装饰器@classmethod。这是什么原因?

https://github.com/django/django/blob/3.0/django/db/models/base.py#L320

https://github.com/django/django/blob/3.0/django/db/models/manager.py#L20

您所谈论的项目被用作metaclasses [Python-doc]. One could say that a meta-class is the type of the type. If we for example take a look at the ModelBase soure code [GitHub],我们看到:

class ModelBase(<b>type</b>):
    """Metaclass for all models."""
    def __new__(cls, name, bases, attrs, **kwargs):
        super_new = super().__new__

    # …

它因此继承自type,这是meta-classes的基本基础class。

这里的 "self" 对象是被分析、更新等的 class 本身。虽然本身不​​需要使用 cls,但通常在 meta-classes 中 ordinary class 的 self 在 meta-[=] 中被命名为 cls 26=] 定义,强调我们正在操作的 class 对象本身。