更改python类型提示的成员参数类型

时间:2018-04-06 13:00:10

标签: python mypy

我有这样的代码:

class A:
    def __init__(self, a: int) -> None:
        self.a: int = a


class B(A):
    def __init__(self, a: float) -> None:
        self.a: float = a

问题是self.a从基类A中的类型 int 更改为类B中的 float .mypy给出了这个错误:

typehintancestor.py:8: error: Incompatible types in assignment (expression has type "float", variable has type "int")

(第8行是最后一行)

这是mypy中的错误还是我应该更改B类的实现?

1 个答案:

答案 0 :(得分:0)

这是您的代码中的错误。假设以这种方式定义类是合法的,我们编写了以下程序:

from typing import List

# class definitions here

def extract_int(items: List[A]) -> List[int]:
    return [item.a for item in items]

my_list: List[A] = [A(1), A(2), B(3.14)]
list_of_ints = extract_int(my_list)

我们希望list_of_ints变量只包含一个整数,但它实际上包含一个浮点数。

基本上,mypy强制您的代码遵循此处的Liskov substitution principle