![](/img/trans.png)
[英]TypeError: __init_subclass__() takes no keyword arguments
[英]How to pass `__init_subclass__` keyword arguments when using `type`?
我有一個接受關鍵字 arguments 的 class,這是在 Python 3.6 中與__init_subclass__
一起引入的:
class Parent:
def __init_subclass__(cls, key=None, **kwargs):
super().__init_subclass__(**kwargs)
assert key is not None
class Child(Parent, key=5):
pass
Child2 = type("Child2", (Parent,), {})
但它給出了一個AssertionError
因為沒有傳遞任何key
。 如果我嘗試提供 arguments 的附加字典,則會收到以下錯誤:
>>> type("Child2", (Parent,), {}, {"key": 5})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: type() takes 1 or 3 arguments
而且 function類型的文檔也不允許指定它們。 如何將這些 kwargs 傳遞給__init_subclass__
?
您可以將關鍵字 arguments 傳遞給type()
調用:
Child2 = type("Child2", (base,), {}, key=5)
自 Python 3.6.0 起,這與__init_subclass__
一起可用,但實際上是 Python 文檔中的疏忽。 它已在 Python 3.10 開發文檔(此處)中更正,其type()
簽名向您展示了如何操作:
type(name, bases, dict, **kwds)
並說明了這種可能性:
提供給三個參數形式的關鍵字 arguments 以與 class 定義(除了元類)中的關鍵字相同的方式傳遞給適當的元類機制(通常是
__init_subclass__()
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.