python - 子类化时如何不必在 init 中键入 self

标签 python python-3.x typechecking mypy

MCVE:

class A:
    def __init__(self, num: int):
        self.value = num

class B(A):
    def __init__(self): # Mypy: function is missing a type annotation
        A.__init__(self, 7) # Mypy: Expression has type "Any"

我希望 Mypy 不要强制我必须输入 self。对我来说,self 的类型是什么是显而易见的,并且 Mypy 能够计算出 A 的类型,那么为什么不可以计算出 B 呢?

我如何定义B,这样我就不会被迫执行以下操作?

class A:
    def __init__(self, num: int):
        self.value = num

class B(A):
    def __init__(self: 'B'):
        A.__init__(self, 7)

最佳答案

您需要注释签名的返回类型:

class Foo:
    def __init__(self) -> None:
        pass

如果注释了一个或多个其他参数,Mypy 将允许您在构造函数上省略返回类型,但您需要将其包含在无参数构造函数中。

关于python - 子类化时如何不必在 init 中键入 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56482426/

相关文章:

PHP:类型检查返回值是一种弥补 PHP 泛型不足的好习惯吗?

python - PySpark:不使用循环将 DataFrame 拆分为多个 DataFrame

python - 保存包含pyqt对象的类数据

Python AWS Lambda 事件 JSON

Python:用句点(或其他字符)替换字符串中除第 n 个字母外的每个字母

typescript - 一起使用 pnpm 和 typescript 的类型检查问题

python - 使用PIL将一张512*256的图片分成2张每张256*256的图片

python - 根据循环中的匹配创建重复数据删除列表的列表? - python ,Openpyxl

python - 模糊图像内形状像圆角矩形的区域

java - 嵌入式 Groovy : How to use static type checking with external variables?