小编dr.*_*ren的帖子

Mypy:以抽象类作为值的映射的类型注释

我正在开发一个具有各种存储后端的框架。这些后端都实现了一个抽象基类。后端类存储在从后端名称到实现该后端的类的映射中。

我们希望能够使用mypy执行类型检查,并注释如下:

#!python
import abc
import typing


class A(metaclass=abc.ABCMeta):  # The abstract base class
    def __init__(self, name: str) -> None:
        self.name = name

    @abc.abstractmethod
    def get_name(self):
        pass


class B(A):  # Some non-abstract backend
    def get_name(self):
        return f'B: {self.name}'


class C(A):  # Another non-abstract backend
    def get_name(self):
        return f'C: {self.name}'


backends: typing.Mapping[str, typing.Type[A]] = {
    'backend-b': B,
    'backend-c': C,
}


if __name__ == '__main__':
    backend_cls = backends['backend-c']
    # The following line causes an error with mypy:
    instance = backend_cls('demo-name') …
Run Code Online (Sandbox Code Playgroud)

python type-hinting mypy

5
推荐指数
1
解决办法
2418
查看次数

标签 统计

mypy ×1

python ×1

type-hinting ×1