【发布时间】:2021-02-09 14:46:08
【问题描述】:
我有一个函数:
def foo(path):
"""
:param path: Path to a folder
:type path: pathlib.Path
"""
new_path = path / 'tmp'
return new_path
它获取一个pathlib.Path 对象并在此路径的末尾添加'tmp'。但是 PyCharm 在new_path = path / 'tmp' 中的path 下显示了一个“未解决的引用”。
很明显,如果此类变量的类型是内置的,则不会发生这种情况。请注意,如果我导入from pathlib import Path 并将def foo(path) 更改为def foo(path: Path),则可以解决此问题。但我想知道是否有任何方法可以在没有不必要的进口的情况下做到这一点。我阅读了有关 Python 类型的文章,但找不到解决方案。
【问题讨论】:
-
@CATboardBETA 不用担心。
pathlib库中的Path对象提供了将除法运算符实现为连接运算符的此类行为。所以不用传统的os.path.join(path, 'tmp'),你可以简单地做path / 'tmp' -
在功能上按
ctrl+q我什至在描述中得到了所需的def foo(path: Path) -> Path(不导入pathlib) -
@Tomerikoo 是的,Pycharm 就是这样做的。但是你会得到“NameError: name 'Path' is not defined”,因为路径没有被导入
-
FWIW,这些导入不是不必要的。其他代码检查您的函数是完全有效的,这需要正确解析名称。除非有明确的技术原因(例如循环导入),否则您应该添加导入。
-
@MisterMiyagi 我假设 path 是一个可以通过不同模块传递的对象,因为它可以被 python 识别为内部人员,我不应该使用另一个导入。所以你说它不是pythonic?
标签: python pycharm python-typing