mypy 没有检测到未初始化的属性

mypy isn't detecting uninitialised attributes

此代码检查 mypy 的默认调用:


class A:

  myattr: str


class B(A):
  otherattr: str

A().myattrB().myattr 都会引发属性错误:AttributeError: 'A' object has no attribute 'myattr'

有没有办法让 mypy 报告这个?

这是 Python 3.7.2,mypy 0.670

我认为目前答案是否定的。

这里有一些关于将此添加为功能的讨论:

https://github.com/python/mypy/issues/4019

不过最近好像没有更新。如果你有一个强大的用例来做这件事,也许值得在那里发表评论,以及你希望看到什么错误,即你希望错误是你正在访问一个初始化变量还是变量没有初始化class 初始构造函数还是新构造函数?

我发现我可以通过定义 Protocol 而不是常规超类来获得我想要的大部分内容(在我的真实世界的用例中):mypy 确实检测在那里定义的未初始化属性。