gpt4 book ai didi

python - 安抚 MyPy 尝试使用实例变量

转载 作者:行者123 更新时间:2023-12-05 05:47:06 26 4
gpt4 key购买 nike

如果我有这样的文件 mypytest/models.py:

from typing import Type


class FakeBaseModel:
pass


class FakeDatabase:
Base: Type[FakeBaseModel]

def __init__(self) -> None:
self.Base = FakeBaseModel


db = FakeDatabase()


class FakeModel(db.Base):
pass

然后我运行 mypy .,我得到以下输出:

[mypytest {mypytest}]$ mypy .
mypytest/models.py:18: error: Name "db.Base" is not defined
Found 1 error in 1 file (checked 2 source files)

很明显,db.Base 已定义。我如何让 mypy 识别它?

最佳答案

我认为这里的问题是 db.Basevariable, not a type alias .

从您的示例中不清楚您需要动态基类的确切原因。内联 FakeBaseModel 显然可行;您也可以在运行类型检查时只使用类型别名:

from typing import Type, TYPE_CHECKING

# *snip*

db = FakeDatabase()

if TYPE_CHECKING:
FakeBase = FakeBaseModel
else:
FakeBase = db.Base

class FakeModel(FakeBase):
pass

这将根据您提供的内容生成有效的类型检查(基本上,只要 FakeModel 仅使用 FakeBaseModel 中的内容,因此将其视为一个是安全的).

关于python - 安抚 MyPy 尝试使用实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71069074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com