创建自己的序列,让其支持容器类型的操作。

  • 创建属于自己的序列
  • 如果想要像操作序列那样,操作某些对象,但是原生的对象不支持容器类型的操作。这个时候就需创建自己的序列。
class User(object):
    def __init__(self, id_list= None):
        self.id_list = id_list

    def __repr__(self):
        # f"User({self.id_list})" 等同.format格式化输出效果
        return f"User({self.id_list})"

    def __len__(self):
    # 实现__len__()方法,才能正常调用len(id_list) 可变和不可变序列都需要实现这个方法。
        return len(self.id_list)

    def __getitem__(self, key):
    # 如果通过对象下标索引访问,key就是下标索引值
    # 如果通过切片访问__getitem__()方法,key 是slice(也就是切片索引)
        return self.id_list[key]

    def __setitem__(self, key, value):
        self.id_list[key] = value

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

    def __reversed__(self):
        return reversed(self.id_list)
id_list = User(id_list=["001", "002", "003"])
print(id_list)  # User(['001', '002', '003'])
print(len(id_list))  # 通过实现__len__()方法解决
print(id_list[0])  # 001
 通过实现__getitem__()方法解决通过下标索引访问对象元素

print(id_list[::-1]) # ['003', '002', '001']
 __getitem__()方法也实现了通过切片访问

for i in id_list:
    print(i, end= " ") # 001 002 003
 既然是让对象实现了序列,那么也支持for循环访问对象内的元素
id_list[0] = "004" # 修改序列元素值的操作,由__setitem__()方法实现
print(id_list) # User(['004', '002', '003'])
del id_list[0] # 删除操作由__delitem__()方法实现。
print(id_list) #User(['002', '003'])
print(sorted(id_list)) 
 虽然没有出现原生对象排序的语句,但这个方法可用 sort()方法是对原对象真实排序,如果这里使用id_list.sort(),会报错,
 原因可能是没有实现对原生对象排序的方法,暂时没有搞懂,只能先这样了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值