【发布时间】:2022-01-22 05:23:06
【问题描述】:
我有一个 python 函数,它接受一个 multiprocessing.Lock 对象作为输入,并在其上使用获取和释放函数。使用 mypy 评估它会返回错误 Function multiprocessing.Lock" is not valid as a type。如何正确注释此函数?
【问题讨论】:
标签: python multiprocessing type-hinting mypy
我有一个 python 函数,它接受一个 multiprocessing.Lock 对象作为输入,并在其上使用获取和释放函数。使用 mypy 评估它会返回错误 Function multiprocessing.Lock" is not valid as a type。如何正确注释此函数?
【问题讨论】:
标签: python multiprocessing type-hinting mypy
Lock实际上是一个普通函数,返回一个_LockType,定义为_LockType = synchronize.Lock,所以你可以这样做:
from multiprocessing.synchronize import Lock as LockBase
def func(lock: LockBase):
pass
尽管他们将 _LockType 作为私有模块这一事实表明他们将其视为未来可能会更改的实现细节,所以要小心。
上面还有这个注释块,其中定义了_LockType:
# The following type aliases can be used to annotate the return values of
# the corresponding functions. They are not defined at runtime.
#
# from multiprocessing import Lock
# from typing import TYPE_CHECKING
# if TYPE_CHECKING:
# from multiprocessing import _LockType
# lock: _LockType = Lock()
. . .
_LockType = synchronize.Lock
【讨论】: