这是我的代码片段。我想知道这两个工厂类的create
classmethod使用什么返回类型。如果可能的话,我想避免使用Union[Model1, Model2]
T = typing.TypeVar("T", bound="BaseModel")
@dataclass
class BaseModel(object):
pass
@dataclass
class Model1(BaseModel):
pass
@dataclass
class Model2(BaseModel):
pass
class ModelFactory(ABC):
@classmethod
@abstractmethod
def create(cls) -> T:
pass
class Model1Factory(ModelFactory):
@classmethod
def create(cls) -> T:
return Model1()
class Model2Factory(ModelFactory):
@classmethod
def create(cls) -> T:
return Model2()
m1factory = Model1Factory()
m1 = m1factory.create()
我从mypy获得的错误:
type_hint.child_class_return_self.2.py:32: error: Incompatible return value type (got "Model1", expected "T")
type_hint.child_class_return_self.2.py:37: error: Incompatible return value type (got "Model2", expected "T")
type_hint.child_class_return_self.2.py:41: error: Need type annotation for 'm1'
我认为您只需要将
Generic
合并到等式中,以便mypy
可以接受不同的返回类型:根据mypy cheat sheet的说法,你应该选择
Union[Model1, Model2]
,但是如果这是你想要避免的事情,下一个最好的候选者是Any
类型相关问题 更多 >
编程相关推荐