【发布时间】:2020-05-28 09:39:05
【问题描述】:
Python 的文档在https://docs.python.org/3/library/collections.abc.html 处非常清楚地列出了抽象基类的实现应该具有的所有方法。
然而,切片有时仅作为__getitem__ 的一部分实现。
我想所有继承自Sequence 的类都会实现它,是这样吗?还有其他方法可以知道对象支持切片吗?
编辑:我还在文档中找到了https://docs.python.org/3/library/stdtypes.html#typesseq-common。它将方法列为“大多数序列类型支持”。
我将其视为“序列类型应实现切片”并使用它进行注释。
【问题讨论】:
-
“pythonic”的方式是尝试做它并查看是否引发异常。
-
曾经有一个
__getslice__方法,但在很久之前通过将slice对象传递给__getitem__来取代它。实际上并没有一类专门实现切片的类型,就像没有可以用int值索引的类型与可以用str值索引的类型一样。 -
似乎隐含
Sequence是一种其顺序由其索引排序确定的类型,而Mapping是一种其顺序(如果定义在全部)不是。
标签: python slice abstract-base-class