from abc import ABCMeta, abstractmethod
class AbstractObject(metaclass=ABCMeta):
pass
class BObject(AbstractObject):
pass
class CObject(AbstractObject):
pass
class A(metaclass=ABCMeta):
def restore_object(self) -> "AbstractObject":
a = self.create_object()
# другие действия
return a
@abstractmethod
def create_object(self) -> "AbstractObject":
pass
class B(A):
def create_object(self):
return BObject()
class C(A):
def create_object(self):
return CObject()
b_manager = B()
c_manager = C()
one_object: "BObject" = b_manager.restore_object() # здесь ошибка типа
two_object: "CObject" = c_manager.restore_object() # Expected type 'BObject', got 'AbstractObject' instead
调用方法“restore_object”时,无法指定所需的类型。在其他一些语言中,可以使用与我指出的大致相同的语法从抽象中细化返回类型。如何在 Python 中解决这个问题?
可以使类
A通用(如果您使用的是 Python 3.5 或更高版本):试试这样:
左右,如果预期以前未知的类型: