我有几个使用静态方法实现行为的类。我将它们收集在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
的类型?
[尝试一下:“ Specifics:Dict [Cuties:Animal] = {”。用冒号代替逗号。