【发布时间】:2023-03-03 09:49:02
【问题描述】:
我想使用像列表这样的类。我发现继承和实现collections.abc.MutableSequence 使类类似于列表,但我不知道如何重载方法如__getitem__、__setitem__ 分别用于整数和切片。
Pycharm 生成如下代码:
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, i: int, 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
我知道 Python 不支持重载,但有几种方法可以做到
但我只想跟着Pycharm的流程。
所以我想使用 @overload 装饰器,但我不明白如何使用它。
谁能举个简单的例子?我也非常感谢您提供一些参考资料。
【问题讨论】:
标签: python pycharm overloading abc