如何为mypy定义类字典的类型?

问题描述 投票:0回答:1

我有几个使用静态方法实现行为的类。我将它们收集在python字典中。如何为mypy写下字典类型?下面的示例。

#!/usr/bin/env python3


from typing import Dict
from abc import ABCMeta, abstractmethod
import enum


class Cuties(enum.Enum):
    Doggo = enum.auto()
    Kitty = enum.auto()
    Birb = enum.auto()


class Animal(metaclass=ABCMeta):

    @staticmethod
    @abstractmethod
    def give_sound() -> str:
        ...

    @staticmethod
    @abstractmethod
    def likes_ferrets(ferret_fur_colour: str) -> bool:
        ...


class Doggo_Specifics(Animal):

    @staticmethod
    def give_sound() -> str:
        return 'woofle'

    @staticmethod
    def likes_ferrets(ferret_fur_colour: str) -> bool:
        return False


class Kitty_Specifics(Animal):

    @staticmethod
    def give_sound() -> str:
        return 'meow'

    @staticmethod
    def likes_ferrets(ferret_fur_colour: str) -> bool:
        return True


class Birb_Specifics(Animal):

    @staticmethod
    def give_sound() -> str:
        return 'peep'

    @staticmethod
    def likes_ferrets(ferret_fur_colour: str) -> bool:
        return ferret_fur_colour == 'brown'


Specifics: Dict[Cuties, Animal] = {
    Cuties.Doggo: Doggo_Specifics,
    Cuties.Kitty: Kitty_Specifics,
    Cuties.Birb: Birb_Specifics,
}

mypy给出Specifics类型的错误:

test.py:62: error: Dict entry 0 has incompatible type "Cuties": "Type[Doggo_Specifics]"; expected "Cuties": "Animal"
test.py:63: error: Dict entry 1 has incompatible type "Cuties": "Type[Kitty_Specifics]"; expected "Cuties": "Animal"
test.py:64: error: Dict entry 2 has incompatible type "Cuties": "Type[Birb_Specifics]"; expected "Cuties": "Animal"

我应该如何定义Specifics的类型?

python types mypy
1个回答
0
投票

[尝试一下:“ Specifics:Dict [Cuties:Animal] = {”。用冒号代替逗号。

© www.soinside.com 2019 - 2024. All rights reserved.