如何声明包含 类 的字典类型
How declare type of dict containing classes
我试图用 typing
模块声明以下函数参数的类型:
import typing
class A(object):
pass
class B(A):
pass
class C(B):
pass
def my_func(p: typing.Dict[A, str]) -> None:
pass
my_func({C: 'foo'})
my_func
的 p
参数必须是 dict
,A
的子类作为键,str
作为值。实际符号失败 mypy
检查:
example.py:17: error: List item 0 has incompatible type "Tuple[C, str]"
如何通过键入声明 p
的类型?
代码使用 class C
本身作为键,而不是 C
.
的实例
my_func({C: 'foo'})
传递 C class 的实例应该没问题。
my_func({C(): 'foo'})
^^^--- instance, not a class itself
如果你真的需要传递class本身(我对此表示怀疑),你需要使用typing.Type
:
typing.Dict[typing.Type[A], str]
^^^^^^^^^^^^^^
我试图用 typing
模块声明以下函数参数的类型:
import typing
class A(object):
pass
class B(A):
pass
class C(B):
pass
def my_func(p: typing.Dict[A, str]) -> None:
pass
my_func({C: 'foo'})
my_func
的 p
参数必须是 dict
,A
的子类作为键,str
作为值。实际符号失败 mypy
检查:
example.py:17: error: List item 0 has incompatible type "Tuple[C, str]"
如何通过键入声明 p
的类型?
代码使用 class C
本身作为键,而不是 C
.
my_func({C: 'foo'})
传递 C class 的实例应该没问题。
my_func({C(): 'foo'})
^^^--- instance, not a class itself
如果你真的需要传递class本身(我对此表示怀疑),你需要使用typing.Type
:
typing.Dict[typing.Type[A], str]
^^^^^^^^^^^^^^