小编use*_*096的帖子

如何在python中继承类型提示?

所以我的问题是,当我有一个做事的类型A的类并且我将那些函数用作子类(B)时,它们仍为类A键入,并且不接受我的类B对象作为参数或函数签名。

我的问题简化了:

from typing import TypeVar, Generic, Callable

T = TypeVar('T')


class Signal(Generic[T]):
    def connect(self, connector: Callable[[T], None]) -> None:
        pass

    def emit(self, payload: T):
        pass


class A:
    def __init__(self) -> None:
        self.signal = Signal[A]()

    def do(self) -> None:
        self.signal.emit(self)

def handle_b(b: "B") -> None:
    print(b.something)

class B(A):
    def __init__(self) -> None:
        super().__init__()
        self.signal.connect(handle_b)

    @property
    def something(self) -> int:
        return 42
Run Code Online (Sandbox Code Playgroud)

我也可以提供完整的信号类别,但这只是分散了问题的注意力。这使我在mypy中出现一个错误->错误:“信号”的“连接”参数1具有不兼容的类型Callable [[B],无];预期可调用[[A],无]

由于信号处理是在A中实现的,因此子类B不能期望返回B类型的对象,即使它显然应该很好...

python inheritance type-hinting python-3.5 mypy

6
推荐指数
1
解决办法
1365
查看次数

标签 统计

inheritance ×1

mypy ×1

python ×1

python-3.5 ×1

type-hinting ×1