覆盖自定义对象上的切片(Python)[重复]

Posted

技术标签:

【中文标题】覆盖自定义对象上的切片(Python)[重复]【英文标题】:Overriding slicing on custom object (Python) [duplicate] 【发布时间】:2016-07-24 04:18:47 【问题描述】:

我有一个简单的类,它将对象列表作为输入,我想确保我可以对该操作执行切片。

class MyClass(AbstractLocationClass):
    def __init__(locations=None, **kwargs):
       if locations is None:
           locations = []
       self._locations = locations
       #... do other stuff with kwargs..

我希望允许用户执行以下操作:

 m = MyClass(locations=[[1,2],[2,3],[3,4]])
 sliced = m[0:1]
 print sliced 
 >>> [[1,2],[2,3]]

我知道我必须重写 __getitem__,但我不确定如何处理所有符号类型,如 obj[0]、obj[1:2] 等...

有人可以就实现此功能的正确方法提出建议。

【问题讨论】:

【参考方案1】:

我发现我需要检查索引是否为slice 类型

#----------------------------------------------------------------------
def __getitem__(self, index):
    """slicing"""
    if len(self) == 0:
        return []

    if isinstance(index, slice):
        return self._locations[index]
    else:
        if index <= len(self) -1:
            return self._locatios[index]
        else:
            raise ValueError("Invalid index")

【讨论】:

以上是关于覆盖自定义对象上的切片(Python)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python中迭代器&生成器的“奇技淫巧“

Python中迭代器&生成器的“奇技淫巧“

如何处理 Android 中远程视图的异常(自定义小部件或自定义通知)?

[TimLinux] Python 自定义描述符

LayUi创建一个自定义通用模块

Python中的切片列表或字符串对象[重复]