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

时间:2019-06-06 17:27:17

标签: 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)

1 个答案:

答案 0 :(得分:3)

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

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

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