微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何定义一种封装/描述特定模块的行为/签名的类型?

如何解决如何定义一种封装/描述特定模块的行为/签名的类型?

如何定义一种封装/描述特定模块的行为/签名的类型?

问题源于我必须睡在我的代码中,而我想对此进行抽象。我想为time库注入一个模拟(很可能以后我想要time之后的其他函数),并且我还想定义类型以启用静态类型检查(MyPy用于类型检查)。我还希望我的IDE具有适当的自动补全功能和说明文件(如果可以正确猜出“类型”,情况将会如此)

我目前有以下代码可以运行并通过我的检查,但是这只会忽略MyPy错误(时间不是有效类型):

import time
[other relevant imports]
...

@dataclass
class RPUService:
    config: RPUConfig
    _time: time = time  # type: ignore[valid-type]
    ...

    def some_method(self):
         self._time.sleep(self.config.sleepytime)

我还可以如下编写_time定义:

from types import ModuleType
_time: ModuleType = time

或类似地与Any

from typing import Any
_time: Any = time

这两个都是有效的,但是这消除了我的IDE将self._time识别为time库的能力。 (或类似time库的东西)

我可以定义一个Protocol签名的time.sleep,但是我宁愿没有维护这样一个Protocol的开销。 (PEP-544)

所以我的问题是,如何定义一个封装/描述特定模块行为的类型?

(如果不清楚,请询问)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。