Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当使用'type'时,如何传递''.'初始化'.'子类'.'关键字参数?_Python_Metaclass - Fatal编程技术网

Python 当使用'type'时,如何传递''.'初始化'.'子类'.'关键字参数?

Python 当使用'type'时,如何传递''.'初始化'.'子类'.'关键字参数?,python,metaclass,Python,Metaclass,我有一个接受关键字参数的类,它是与Python 3.6中的\uuuuu init\u subclass\uuuuu一起引入的: 类父级: 定义初始子类(cls,key=None,**kwargs): super().\uuuu init\u子类(**kwargs) assert键不是None 类子级(父级,键=5): 通过 Child2=类型(“Child2”,(父级,),{}) 但是它给出了一个断言错误,因为没有传递键。如果我试图提供一个额外的参数字典,我会得到以下错误: >>&

我有一个接受关键字参数的类,它是与Python 3.6中的
\uuuuu init\u subclass\uuuuu
一起引入的:

类父级:
定义初始子类(cls,key=None,**kwargs):
super().\uuuu init\u子类(**kwargs)
assert键不是None
类子级(父级,键=5):
通过
Child2=类型(“Child2”,(父级,),{})
但是它给出了一个
断言错误
,因为没有传递
。如果我试图提供一个额外的参数字典,我会得到以下错误:

>>> type("Child2", (Parent,), {}, {"key": 5})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: type() takes 1 or 3 arguments
>>类型(“Child2”,(Parent,),{},{“key”:5})
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:type()接受1或3个参数

而且函数的文档也不允许指定它们。如何将这些KWARG传递给
\uuuu init\u子类?

您可以将关键字参数传递给
type()
调用:

Child2=type(“Child2”,(base,),{},key=5)
自Python 3.6.0以来,它与
\uuuuu init\u subclass\uuuuu
一起提供,但实际上这是Python文档中的一个疏忽。它已在Python 3.10开发文档()中更正,其
type()
签名向您展示了如何执行此操作:

type(name, bases, dict, **kwds)
并指出这种可能性:

提供给三个参数形式的关键字参数被传递到适当的元类机制(通常是
\uu init\u subclass\uu()
)中,传递方式与类定义中的关键字(元类除外)相同