似乎找不到明确的答案。我想为一个函数做一个类型提示,类型是我定义的一些自定义类,称为它CustomClass()
。
然后让我们说在某个函数中,调用它FuncA(arg)
,我有一个名为 的参数arg
。输入提示的正确方法FuncA
是:
def FuncA(arg: CustomClass):
或者会是:
from typing import Type
def FuncA(Arg:Type[CustomClass]):
似乎找不到明确的答案。我想为一个函数做一个类型提示,类型是我定义的一些自定义类,称为它CustomClass()
。
然后让我们说在某个函数中,调用它FuncA(arg)
,我有一个名为 的参数arg
。输入提示的正确方法FuncA
是:
def FuncA(arg: CustomClass):
或者会是:
from typing import Type
def FuncA(Arg:Type[CustomClass]):
前者是正确的,如果arg
接受以下实例CustomClass
:
def FuncA(arg: CustomClass):
# ^ instance of CustomClass
如果你想要类CustomClass
本身(或子类型),那么你应该写:
from typing import Type # you have to import Type
def FuncA(arg: Type[CustomClass]):
# ^ CustomClass (class object) itself
就像它写在关于Typing的文档中一样:
class typing.Type(Generic[CT_co])
带有注释的变量
C
可以接受 type 的值C
。相比之下,带有注释的变量Type[C]
可能接受本身就是类的值- 具体来说,它将接受 的类对象C
。
该文档包含一个带有int
该类的示例:
a = 3 # Has type 'int' b = int # Has type 'Type[int]' c = type(a) # Also has type 'Type[int]'
Willem Van Onsem 的回答当然是正确的,但我想提供一个小的更新。在PEP 585中,在标准集合中引入了类型提示泛型。例如,虽然我们之前不得不说 eg
from typing import Dict
foo: Dict[str, str] = { "bar": "baz" }
我们现在可以放弃typing
模块中的并行类型层次结构,简单地说
foo: dict[str, str] = { "bar": "baz" }
此功能在 python 3.9+ 中可用,如果使用from __future__ import annotations
.
就这个特定问题而言,这意味着from typing import Type
我们现在可以使用内置的 来简单地注释类type
:
def FuncA(arg: type[CustomClass]):