【发布时间】:2019-02-15 09:45:39
【问题描述】:
在阅读 typing 模块源代码时,我注意到以下内容:
class _SpecialForm(_Final, _Immutable, _root=True):
...
这里,赋值位于基类列表中。
稍后,它被签入:
class _Final:
def __init_subclass__(self, *args, **kwds):
if '_root' not in kwds:
raise TypeError("Cannot subclass special typing classes")
_root 到底去了哪里?文档将其称为“类关键字参数”(https://docs.python.org/3/reference/datamodel.html#object.init_subclass),但我找不到任何进一步的信息。
【问题讨论】:
-
什么意思?与其他方法一样,如果您不覆盖它,它将最终调用根实现,
object.__init_subclass__(它不接受任何关键字参数)。正如文档所描述的那样,它不是一个赋值,而是一个关键字参数。 -
你已经找到了。它最终成为
__init_subclass__的参数。 (至少在这种特定情况下。一般来说,它也可以转到元类的__new__。) -
所以它实际上唯一的作用就是传递给
__init_subclass__?
标签: python python-3.x metaclass