【问题标题】:Why is self not type hinted in Python为什么在 Python 中没有提示 self 类型
【发布时间】:2020-09-15 17:10:47
【问题描述】:

我一直在研究我的代码的类型提示,但注意到 Python 程序员通常不会在他们的程序中输入提示 self

即使我查看文档,他们似乎也没有输入提示 self,请参阅 here。这是来自 3.10 版的后向声明

    def __init__(self, value: T, name: str, logger: Logger) -> None:

我可以理解为什么在 3.7 中使用前向声明引入类型注释之前这是一个问题

更多信息 herehere


这对我来说似乎有用的原因是 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 的注释由于某种原因有误?

【问题讨论】:

  • 不需要——self的类型保证是类。
  • 我怎么不是我自己?
  • 是的,我完全同意。也许工作是让mypy 能够检查self 参数而不需要类型提示?我想我遇到了一个问题,我想看看会发生什么然后注意到。 “嘿,mypy 正在发现我不知道的错误”为什么我不在任何地方都这样做/
  • @Barmar“保证”->“预期”
  • @khelwood 是的,我马上就后悔了。但它与任何其他类型注释一样“有保证”。

标签: python mypy


【解决方案1】:

mypy 通常处理 self 的类型而不需要显式注释。您遇到了一个不同的问题 - 没有参数或返回类型注释的方法根本没有进行类型检查。对于没有非self 参数的方法,可以通过注解self 来避免这种情况,但也可以通过注解返回类型来避免这种情况。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 2018-05-20
  • 2019-05-24
相关资源
最近更新 更多