Python 具有可重写静态属性的抽象类注释
我有一个抽象类:Python 具有可重写静态属性的抽象类注释,python,mypy,python-typing,Python,Mypy,Python Typing,我有一个抽象类: import abc from pydantic import BaseModel class Abstract(abc.ABC): context_class: ClassVar[Type['BaseModel']] error: ClassVar[Type[Exception]] def __init__(self, data: Dict) -> None: self.context = self.context_class
import abc
from pydantic import BaseModel
class Abstract(abc.ABC):
context_class: ClassVar[Type['BaseModel']]
error: ClassVar[Type[Exception]]
def __init__(self, data: Dict) -> None:
self.context = self.context_class(**data)
@abc.abstractmethod
def process(self) -> None:
pass
在它的继承器中,我覆盖了属性上下文\u类
:
class Context(BaseModel):
email: str
class Concrete(Abstract):
context_class = Context
def process(self) -> None:
print(self.context.email)
Mypy检查失败,出现以下错误:
... error: "BaseModel" has no attribute "email"
软件包版本:
- Python 3.8.2
- Mypy 0.770
- Pydantic 1.6.1
导入abc
输入import ClassVar、Type、Dict、Generic、TypeVar
从pydantic导入BaseModel
T=TypeVar('T',bound=BaseModel)
类摘要(abc.abc,Generic[T]):
上下文类:ClassVar[Type[T]]
错误:ClassVar[类型[异常]]
定义初始化(self,数据:Dict)->无:
self.context=self.context\u类(**数据)
@抽象方法
def过程(自身)->无:
通过
类上下文(基本模型):
电邮:str
类具体(抽象[上下文]):
上下文类=上下文
def过程(自身)->无:
打印(self.context.email)