我有一个功能:
def foo(path):
"""
:param path: Path to a folder
:type path: pathlib.Path
"""
new_path = path / 'tmp'
return new_path
它获取一个pathlib.Path
对象,并在此路径的末尾添加“ tmp”。但是PyCharm显示了“未解决下参考path
在new_path = path / 'tmp'
。
显而易见,如果此类变量的类型是内置的,则不会发生这种情况。请注意,如果将导入from pathlib import Path
并将其更改为def foo(path)
,则可以解决此问题def foo(path: Path)
。但是我想知道是否有任何方法可以在没有不必要的导入的情况下进行此操作。我读到有关Python输入的信息,但找不到解决方案。
在下面的示例中,PyCharm会发出警告,Unresolved reference 'Path'
因为注释中的Path
类型提示argument_path
尚未从中导入pathlib
。对参数和变量均发出警告。
def foo(argument_path: Path):
"""
:param path: Path to a folder
:type path: Path
"""
new_path: Path = argument_path / 'tmp'
return new_path
解决此问题的明显方法是from pathlib import Path
在模块顶部使用。
from pathlib import Path
def foo(argument_path: Path):
new_path: Path = argument_path / 'tmp'
但是我想知道是否有任何方法可以在没有不必要的导入的情况下进行此操作。
有两种方法无需导入即可执行此操作,或者使用批注中的全限定名称 pathlib.Path
def foo(argument_path: pathlib.Path):
new_path: pathlib.Path = argument_path / 'tmp'
或不要使用类型注释,而只需在文档字符串中指定类型。
如果您声明无法在文档字符串中解析的类型,则PyCharm的静态类型检查器不会警告您。相反,当您尝试使用该功能时,PyCharm将发出警告。在下面的示例中,签名或变量声明中未使用任何类型提示,仅在文档字符串中指定类型。
def foo3(argument_path):
"""
:param argument_path: Path to a folder
:type argument_path: pathlib.Path
"""
new_path = path / 'tmp'
return new_path
# PyCharm will issue this warning:
foo3("a_string") # Expected type 'Path', got 'str' instead
最后,您在文档字符串中使用了reStructuredText语法,该选项应在项目设置中的以下位置指定: Settings
>
Tools
>
Python Integrated Tools
>
DocString Format
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句