【发布时间】:2019-09-17 13:30:07
【问题描述】:
我正在使用yarl 库的URL 对象。
它有一个准私有属性._val,它是一个urllib.parse.SplitResult对象,但在yarl/__init__.pyi中没有类型注解。 (可以理解,如果开发人员不想正式将其作为公共 API 的一部分。)
但是,我选择使用URL._val,风险自负。一个虚拟的例子:
# urltest.py
from urllib.parse import SplitResult
from typing import Tuple
from yarl import URL
def foo(u: URL) -> Tuple[str, str, str]:
sr: SplitResult = u._val
return sr[:3]
但是mypy 不喜欢这样,因为它会抱怨:
$ mypy urltest.py
"URL" has no attribute "_val"
那么,我如何在我自己的项目中将实例属性注释“附加”(或扩展)到URL,以便在我的项目的其余部分中使用它?即
from yarl import URL
URL._val: SplitResult
# ...
(mypy 也不喜欢这样;“类型不能在赋值给非 self 属性时声明。”)
更新
我尝试在stubs/yarl/__init__.pyi 中创建一个新的存根文件:
from urllib.parse import SplitResult
class URL:
_val: SplitResult
然后按照stub files 中的描述设置export MYPYPATH='.../stubs'。然而,这覆盖,而不是扩展,现有的注释,所以一切但 ._val 抛出和错误:
错误:“URL”没有属性“with_scheme”
错误:“URL”没有属性“host”
错误:“URL”没有属性“片段”
...等等。
【问题讨论】:
标签: python python-3.x mypy