在浏览 django_filters 库的源代码时,我发现了一种我以前从未见过的类声明语法:带参数的继承。我在官方 python 类教程中找不到解释。这是源代码,片段如下:class FilterSet(BaseFilterSet, metaclass=FilterSetMetaclass):
pass类定义中的metaclass=FilterSetMetaclass是做什么的?
1 回答
慕容708150
TA贡献1831条经验 获得超4个赞
基类列表中的关键字参数有两种用途。
该
metaclass
参数专门用于指示type
要使用哪个元类(而不是 )来创建类。(在 Python 2 中,这是通过为语句__metaclass__
主体中的类属性赋值来完成的。)class
class
语句本质上是对元类的调用。class Foo(metaclass=Bar): pass
相当于
Foo = Bar('Foo', (), {})
。默认元类是type
,即class Foo(): pass
相当于
class Foo(metaclass=type): pass
其他关键字参数传递给
__init_subclass__
.
以上都是简化;有关更多详细信息,请参阅自定义类创建。
添加回答
举报
0/150
提交
取消