我定义了一个抽象基类BaseRepository,它充当具有指定 supertype 的项目的集合Foo。中的便利类方法BaseRepository被注释/类型暗示用于类型的对象Foo。这是一个最小的例子:
from abc import ABCMeta, abstractmethod
NoReturn = None
class Foo(object):
pass # simple data holding object
class BaseRepository(object, metaclass=ABCMeta):
# May be filled with subtypes of `Foo` later
_items = None # type: List[Foo]
@classmethod
def get_item(cls) -> Foo:
return cls._items[0]
@classmethod
@abstractmethod
def _load_items(cls) -> NoReturn:
pass
Run Code Online (Sandbox Code Playgroud)
现在有多个静态实现(例如SubRepository),每个实现都应该使用它们自己的项目类型(例如Bar),它们是原始泛型类型的子类Foo。
class Bar(Foo):
pass # Must implement Foo in order for BaseRepository's methods to work …Run Code Online (Sandbox Code Playgroud)