【发布时间】:2020-08-31 00:06:58
【问题描述】:
我有几个使用静态方法来实现行为的类。我将它们收集在 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的类型?
【问题讨论】:
-
这能回答你的问题吗? Type hints with user defined classes
-
正如副本所说,您应该从
typing导入Type并将您的字典输入为Specifics: Dict[Cuties, Type[Animal]] = {...}。