python 切片函数函数_python使用魔法函数创建可切片类型

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

可切片的对象

"""

import numbers

class sliceObject:

def __init__(self, students):

self.students = students

def __reversed__(self):

pass

def __getitem__(self, item):

"""

实现对象可切片这个魔法函数很关键

:param item: 当传递是切片方式比如[:2]这种,item是一个slice对象,如果传递是[2]整数则是Integral对象。

:return:

"""

cls = type(self) # 获取当前对象的类

if isinstance(item, slice): # item的不同类型返回不同的东西

return cls(students=self.students[item]) # 同样返回可切片的对象而且是sliceObject类这个对象

elif isinstance(item, numbers.Integral): # 如果是整形则返回单一一个对象

return cls(students=[self.students[item]])

# 迭代器

def __iter__(self):

return iter(self.students)

# 获取长度

def __len__(self):

return len(self.students)

# 判断是否存在

def __contains__(self, item):

if item in self.students:

return True

else:

return False

students = ["Tom", "Lucy", "Lili"]

so = sliceObject(students=students)

# 这种用法通过 __getitem__ 实现

a = so[:2]

print(a)

# 这种用法通过 __len__ 实现

print(len(so))

# 这种用法就通过 __contains__ 实现

if "Tom" in so:

print("存在")

# 这种用法通过 __iter__ 实现

for student in so:

print(student)

实现这个效果的重要点就是魔法函数还有就是传递进去的列表对象

作者:昀溪

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值