Python3 中的切片魔术方法

从 Python3 的官方文档可知,Python3中的切片的魔术方法不再是Python2中的__getslice__(), __setslice__()__delslice__(),而是借助 slice 类整合到了__getitem__(),__setitem__()__delitem__()中。
具体如下:

  • __getslice__(), __setslice__() and __delslice__() were killed. The syntax a[i:j] now translates toa.__getitem__(slice(i, j)) (or __setitem__() or __delitem__(), when used as an assignment or deletion target, respectively).

Python2 中的切片魔术方法

Python2 中切片魔术方法的使用示例如下:

#-*- coding:utf-8 -*-
#File Name:slice_operator_python2.py
#Created Time:2018-12-31 18:15:56

class Foo(object):

    def __getslice__(self, i, j):
        print('__getslice__', i, j)

    def __setslice__(self, i, j, sequence):
        print('__setslice__', i, j)

    def __delslice__(self, i, j):
        print('__delslice__', i, j)


if __name__ == "__main__":
    obj = Foo()

    obj[-1:1]                   # 自动触发执行 __getslice__
    obj[0:1] = [11,22,33,44]    # 自动触发执行 __setslice__
    del obj[0:2]   

运行结果如下:


python2 中运行结果

如果换用Python3,则会提示如下错误:


Python3运行结果

Python3 中的切片魔术方法

#-*- coding:utf-8 -*-
#File Name:slice_operator.py
#Created Time:2018-12-31 17:50:31


class Foo(object):

    def __getitem__(self, index):
        if isinstance(index, slice):
            print("Get slice---------> start: %s, stop: %s, step: %s." \
                    % (str(index.start), str(index.stop), str(index.step)))

    def __setitem__(self, index, value):
        if isinstance(index, slice):
            print("Set slice---------> start: %s, stop: %s, step: %s." \
                    % (str(index.start), str(index.stop), str(index.step)))
            print("\tThe value is:", value)
        
    def __delitem__(self, index):
        if isinstance(index, slice):
            print("Delete slice------> start: %s, stop: %s, step: %s." \
                    % (str(index.start), str(index.stop), str(index.step)))


if __name__ == "__main__":
    obj = Foo()
    obj[-1:10]
    obj[-1:10:1] = [2,3,4,5]
    del obj[-1:10:2]

python3 中的运行结果:


Python3中运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容