veg*_*rab 9 python mypy python-typing
我有一个通用库,它定义了我在所有其他包中使用的lib_common基本 pydantic :BaseModel
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib_common\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models.py\nRun Code Online (Sandbox Code Playgroud)\n其中models.py包含:
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 lib_common\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n \xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models.py\nRun Code Online (Sandbox Code Playgroud)\n每当我尝试将其导入其他包并继承StrictBaseModel以定义 pydantic 模型时,我都会得到\nerror: Class cannot subclass "StrictBaseModel" (has type "Any")
from pydantic import BaseModel, Extra\n\nclass StrictBaseModel(BaseModel):\n class Config:\n extra = Extra.forbid\nRun Code Online (Sandbox Code Playgroud)\n我还没有找到一个很好的答案来解释这到底意味着什么。我需要添加哪些提示才能不收到此警告?我不想只是用 a 将其静音# type: ignore或更改我的 mypy 设置。\n这对我来说真的很奇怪,这个错误只发生因为lib_common我的其他包依赖于一个单独的 python 包。
我已经看过很多关于此问题的帖子,其中有很好的答案,如下所示:mypy调用错误:类无法在石墨烯上子类“ObjectType”(具有类型“Any”),该文件表示为要导入的包构建存根文件。但这些都是专门使用外部库的。但是,我可以选择仅正确键入提示我导入/继承的类。
\n我该如何解决这个问题?谢谢
\n如果lib_common是一个单独的包,那么这里没有什么奇怪的。
PEP561对此解释得很好:如果您的包包含内联注释(例如,您认为它是键入的并且不提供单独的存根文件),那么它需要py.typed在根目录中有一个标记。
mypy 文档中有一个此类包的示例。引用:
如果您想自己将库包发布到包存储库(例如在 PyPI 上)以供内部或外部用于类型检查,则通过代码中的类型注释或注释提供类型信息的包应将 py.typed 文件放入他们的包目录。例如,这是一个典型的目录结构:
setup.py
package_a/
__init__.py
lib.py
py.typed
Run Code Online (Sandbox Code Playgroud)
py.typed标记只是一个命名py.typed并位于适当位置的空文件。
| 归档时间: |
|
| 查看次数: |
2220 次 |
| 最近记录: |