使用用户定义的类型提示 类
Type hints with user defined classes
似乎找不到确定的答案。我想为函数做一个类型提示,类型是我定义的一些自定义 class,称为 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
如果你想要 class CustomClass
本身(或子类型),那么你应该写:
from typing import Type # you have to import Type
def FuncA(arg: Type[CustomClass]):
# ^ CustomClass (class object) itself
就像文档中写的那样 Typing:
<b>class typing.Type(Generic[CT_co])</b>
A variable annotated with C
may accept a value of type C
. In
contrast, a variable annotated with Type[C]
may accept values that
are classes themselves - specifically, it will accept the class
object of C
.
文档包含一个示例 int
class:
a = 3 # Has type 'int'
b = int # Has type 'Type[int]'
c = type(a) # Also has type 'Type[int]'
Willem Van Onsem 的回答当然是正确的,但我想提供一个小的更新。在 PEP 585 中,标准集合中引入了类型提示泛型。例如,而我们之前不得不说例如
from typing import Dict
foo: Dict[str, str] = { "bar": "baz" }
我们现在可以放弃 typing
模块中的并行类型层次结构,只需说
foo: dict[str, str] = { "bar": "baz" }
此功能在 python 3.9+ 中可用,如果使用 from __future__ import annotations
.
,则在 3.7+ 中也可用
就这个具体问题而言,这意味着我们现在可以使用内置 type
:
简单地注释 类 而不是 from typing import Type
def FuncA(arg: type[CustomClass]):
似乎找不到确定的答案。我想为函数做一个类型提示,类型是我定义的一些自定义 class,称为 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
如果你想要 class CustomClass
本身(或子类型),那么你应该写:
from typing import Type # you have to import Type
def FuncA(arg: Type[CustomClass]):
# ^ CustomClass (class object) itself
就像文档中写的那样 Typing:
<b>class typing.Type(Generic[CT_co])</b>
A variable annotated with
C
may accept a value of typeC
. In contrast, a variable annotated withType[C]
may accept values that are classes themselves - specifically, it will accept the class object ofC
.
文档包含一个示例 int
class:
a = 3 # Has type 'int' b = int # Has type 'Type[int]' c = type(a) # Also has type 'Type[int]'
Willem Van Onsem 的回答当然是正确的,但我想提供一个小的更新。在 PEP 585 中,标准集合中引入了类型提示泛型。例如,而我们之前不得不说例如
from typing import Dict
foo: Dict[str, str] = { "bar": "baz" }
我们现在可以放弃 typing
模块中的并行类型层次结构,只需说
foo: dict[str, str] = { "bar": "baz" }
此功能在 python 3.9+ 中可用,如果使用 from __future__ import annotations
.
就这个具体问题而言,这意味着我们现在可以使用内置 type
:
from typing import Type
def FuncA(arg: type[CustomClass]):