如何解决如何在自定义类上实现 MutableSequence
我想使用像 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。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。