Dur*_*ndA 5 python setuptools python-import python-3.x python-importlib
我想更新一个库,以便要求是可选的(使用extras_require)。
不幸的是,从可选需求导入的类在库中随处用作类型提示。这是一个例子:
from typing import List
try:
from extra.sub import ExtraFoo, ExtraBar
except ImportError:
pass
def optional(foo: ExtraFoo) -> List[ExtraBar]:
pass
def greeting(name: str) -> str:
return 'Hello ' + name
if __name__ == '__main__':
greeting('John Smith')
Run Code Online (Sandbox Code Playgroud)
optional()在此示例中,如果extra未安装,我们将不会使用。事实上,这样的代码会引发一个NameErrorsinceExtraFoo并ExtraBar用作类型提示。
一个可能的解决方法是在块中声明class ExtraFoo: passand 。然而,在同一模块中具有多种类型的代码中到处都存在这样的情况。class ExtraBar: passexcept
我想避免通过虚拟导入声明污染代码。有没有通用的方法来处理这种情况(例如代理模块)?
我相信原始问题的答案已包含在评论中,但是由于问题已被编辑,因此有点令人困惑。对于问题的当前版本,我相信解决方案是使用前向引用,即将类型提示放在引号中,如下所示:
def optional(foo: "ExtraFoo") -> List["ExtraBar"]:
pass
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
228 次 |
| 最近记录: |