我正在尝试使用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'})
p
的my_func
参数必须是dict
,且A
的子类为键,而str
为值。实际记法通过mypy
检查失败:example.py:17:错误:列表项0的类型“ Tuple [C,str]”不兼容
如何通过键入来声明
p
的类型? 最佳答案
该代码使用类C
本身作为键,而不是C
的实例。
my_func({C: 'foo'})
传递C类的实例应该没问题。
my_func({C(): 'foo'})
^^^--- instance, not a class itself
如果确实需要传递类本身(我对此表示怀疑),则需要使用
typing.Type
:typing.Dict[typing.Type[A], str]
^^^^^^^^^^^^^^