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]
我不使用 mypy,但将
name: str
放在顶部 _instance = None
下应该可以解决这个问题:
class WaitService:
_instance = None
name: str
您没有在任何地方指出该类具有
name
实例属性,因此该错误是有道理的。
请注意,“声明”出现在类变量中,因为有些令人困惑,其中使用类型声明的名称被认为是实例成员,而不是类成员。您也可以提示
_instance
:
class WaitService:
_instance: Optional[ClassVar[None]] = None
name: str