Mypy 看不到我的单例类属性。它抛出 [attr-defined] 和 [no-untyped-def]

问题描述 投票:0回答:1
class WaitService:
    _instance = None

    def __new__(cls, name: str = "Default"):
        if not cls._instance:
            cls._instance = super(WaitService, cls).__new__(cls)
            cls._instance.name = name
        return cls._instance


if __name__ == '__main__':
    w = WaitService("at till 9pm")

    print(w.name)

我上面有一个 python 单例类。它按预期运行,但是当我使用

Mypy
验证它时,出现以下错误。关于如何解决这个问题的任何想法

error: "WaitService" has no attribute "name"  [attr-defined]
error: Function is missing a return type annotation  [no-untyped-def]
python mypy
1个回答
0
投票

我不使用 mypy,但将

name: str
放在顶部
_instance = None
下应该可以解决这个问题:

class WaitService:
    _instance = None
    name: str

您没有在任何地方指出该类具有

name
实例属性,因此该错误是有道理的。

请注意,“声明”出现在类变量中,因为有些令人困惑,其中使用类型声明的名称被认为是实例成员,而不是类成员。您也可以提示

_instance

class WaitService:
    _instance: Optional[ClassVar[None]] = None
    name: str
© www.soinside.com 2019 - 2024. All rights reserved.