问题描述
我一直在研究提示类型的代码,但是注意到Python程序员通常不会在程序中键入提示self
即使当我查看文档时,它们似乎也没有键入提示自我,请参阅 here。这是来自3.10版的发布后声明
def __init__(self,value: T,name: str,logger: Logger) -> None:
在3.7中使用向前声明引入类型注释之前,我可以理解为什么这是一个问题
这对我来说似乎有用的原因是mypy似乎能够捕获与此问题有关的错误
示例:
from __future__ import annotations
class Simple(object):
def __init__(self: Simple):
print(self.x)
将从mypy返回此
mypy test.py
test.py:5: error: "Simple" has no attribute "x"
Found 1 error in 1 file (checked 1 source file)
如果您从self
中删除类型,则变为
Success: no issues found in 1 source file
- 是否有没有对
self
进行注释的原因,或者这仅仅是惯例吗? - 我是否在权衡取舍,或者由于某种原因我对
self
的注释错误吗?
解决方法
mypy通常处理self
类型,而无需显式注释。您遇到了另一个问题-没有参数或返回类型注释的方法根本不会进行类型检查。对于没有非self
参数的方法,可以通过注释self
来避免这种情况,但是也可以通过注释返回类型来避免这种情况。