簡體   English   中英

使用`type`時如何傳遞`__init_subclass__`關鍵字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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM