首页 python基础教程 Python面向对象-类内置方法(__setitem__();__getitem__();__delitem__())实现列表切片功能
pay pay
教程目录

Python面向对象-类内置方法(__setitem__();__getitem__();__delitem__())实现列表切片功能

日期: 二月 13, 2023, 11:52 p.m.
栏目: python基础教程
阅读: 430
作者: Python自学网-村长

摘要: 和字典键值对查找一样,想要把对象实现列表切片功能也要借助于三个方法:__setitem__();__getitem__();__delitem__()。下面就来直接演示。

和字典键值对查找一样,想要把对象实现列表切片功能也要借助于三个方法:__setitem__();__getitem__();__delitem__()。下面就来直接演示。

class Cat:
    def __init__(self, its):
        # self.its = [1, 2, 3, 4, 5, 6]  # 注意切片只能修改不能新增,所以列表中首先要有元素,并且符合切片大小
        self.its = its

    def __setitem__(self, key, value):
        print(key, value)
        print(key.start)
        print(key.stop)
        print(key.step)

    def __getitem__(self, item):
        return self.its[item]

    def __delitem__(self, key):
        del self.its[key]


list1 = [1, 2, 3, 4, 5, 6]
c = Cat(list1)
c[1:4:2] = ['a', 'b']  # 设置一组数据,返回slice(1, 4, 2)对象
print(c.its)
list1 = [1, 2, 3, 4, 5, 6]
c = Cat(list1)
c[1:4:2] = ['a', 'b']  # 设置一组数据,返回slice(1, 4, 2)对象
print(c.its)

这里需要先创建一个列表,然后用实例化的对象来操作他,返回结果如下:

slice(1, 4, 2) ['a', 'b']
1
4
2
[1, 2, 3, 4, 5, 6]

 在列表切片中我们还可以通过起始位置,结束为止和步长来查找指定索引下标下的列表元素。如果想代码更严谨,在上面的代码中__setitem__()功能需要一个容错判断,这里需要用到一个slice参数是一个对象,用来实现切片效果。

先看slice对象文档:

'''slice类中有下面三个属性,看文档,可以通过这三个属性来查看开始,结束和步长
    start = property(lambda self: 0)
    """:type: int"""

    step = property(lambda self: 0)
    """:type: int"""

    stop = property(lambda self: 0)
    """:type: int"""
'''
class Cat:
    def __init__(self):
        self.its = [1, 2, 3, 4, 5, 6]  # 注意切片只能修改不能新增,所以列表中首先要有元素,并且符合切片大小

    def __setitem__(self, key, value):
        if isinstance(key, slice):  # 先做一个容错判断
            self.its[key.start: key.stop: key.step] = value

    def __getitem__(self, item):
        return self.its[item]

    def __delitem__(self, key):
        del self.its[key]


c = Cat()
# 获取切片对象
print(c[1:4:2])
# 删除对应切片元素
del c[1:4]
print(c.its)

返回结果:

[2, 4]
[1, 5, 6]

部分文字内容为【Python自学网】原创作品,转载请注明出处!视频内容已申请版权,切勿转载!
回顶部