python - 为什么在 Python 中没有提示 self 类型
问题描述
我一直在研究我的代码的类型提示,但注意到 Python 程序员通常不会self
在他们的程序中输入提示
即使当我查看文档时,他们似乎也没有输入提示 self,请参见 此处。这是来自 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
,但您也可以通过注释返回类型来避免这种情况。
推荐阅读
- sql - 从 pyqt tableview 在 mssql 中保存数据
- routing - TYPO3 9.5 - 新路由增强器的问题
- python - Why tokenize/preprocess words for language analysis?
- reactjs - Apollo Form State Management
- opencv - 错误:(-215:断言失败)函数'cv :: resize'中的ssize.empty()
- php - 调度作业来处理临时文件是否安全?
- ios - CloudKit中核心数据模型文件的备份和恢复
- python - 使用 Python 对按行和列分隔的数据进行数据处理
- php - 为什么这个变量拒绝像字符串一样工作?
- java - 当我处理 SoundPool 时,A Fragment 中的 getContext() (想要播放数据库中的声音文件)