python - Django 类方法没有装饰器
问题描述
我看到了几个没有装饰器@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
解决方案
您谈论的项目被用作元类[Python-doc]。可以说元类是类型的类型。例如,如果我们看一下ModelBase
源代码 [GitHub],我们会看到:
class ModelBase(type): """Metaclass for all models.""" def __new__(cls, name, bases, attrs, **kwargs): super_new = super().__new__ # …
因此它继承自type
,这是元类的基本基类。
因此,这里的“self”对象是被分析、更新等的类本身。虽然一个人本身不需要使用cls
,但在元类self
中,普通类的名称通常cls
在元类定义,强调我们正在操作的类对象本身。
推荐阅读
- ssl-certificate - lighttpd 配置 - lighttpd 是否使用地址进行身份验证,例如 subjectAltNames=IP:192.168.1.20?
- c# - 在 asp.net 数据表中将日期时间对象转换为仅日期格式
- python - 字符串索引超出范围(Python3)
- video - 哪些视频编解码器适用于 Google Chromebook
- sparql - 选择缺少属性或属性值低于某个限制的实体
- javascript - 如何串联?字符串 + 数学 谢谢
- sqlite - SQL 查询中本地时间的 18 位时间戳
- angular - 替换app文件夹后编译错误
- angular - Angular 2+:如何使用默认值使下拉菜单只读(或禁用)并在没有默认值的情况下添加表单验证错误
- testing - 用于服务/集成测试的 SignalR 服务模拟实现