问题描述
我想使用像 list 这样的类
我发现继承和实现 MutableSequence 使类列表类似
但我不知道如何为整数和切片分别重载 __getitem__
、__setitem__
等方法。
class Test(collections.abc.MutableSequence):
def insert(self,index: int,object: _T) -> None:
pass
@overload
@abstractmethod
def __getitem__(self,i: int) -> _T: ...
@overload
@abstractmethod
def __getitem__(self,s: slice) -> MutableSequence[_T]: ...
def __getitem__(self,i: int) -> _T:
pass
@overload
@abstractmethod
def __setitem__(self,i: int,o: _T) -> None: ...
@overload
@abstractmethod
def __setitem__(self,s: slice,o: Iterable[_T]) -> None: ...
def __setitem__(self,o: _T) -> None:
pass
@overload
@abstractmethod
def __delitem__(self,i: int) -> None: ...
@overload
@abstractmethod
def __delitem__(self,i: slice) -> None: ...
def __delitem__(self,i: int) -> None:
pass
def __len__(self) -> int:
pass
但我只想跟随Pycharm
的流程。
所以我想使用 @overload
装饰器,但我不明白如何使用它
谁能举个简单的例子?或者只是一些参考资料对我来说非常有用
解决方法
-
collections.UserList
是如何正确实现collections.abc.MutableSequence
API 的good example。 - 查看 Raymond Hettinger 撰写的关于 Python 抽象基类的 YouTube talk 以及如何使用它们。
-
typing.overload
装饰器与函数的运行时实现无关。它的唯一目的是帮助静态类型检查。关于如何/何时使用它的好博客here。