python 实现自定义切片类
import numbers class Group: #支持切片操作 def __init__(self, group_name, company_name, staffs): self.group_name = group_name self.company_name = company_name self.staffs = staffs def __reversed__(self): self.staffs.reverse() def __getitem__(self, item): # 实现了这个魔法函数,就可以是获取类中某个可迭代元素的下标的元素,也可以使其成为一个可迭代对象 cls = type(self) # 使用相对编码,进行类型获取 if isinstance(item, slice): return cls(group_name=self.group_name, company_name=self.company_name, staffs=self.staffs[item]) elif isinstance(item, numbers.Integral): return cls(group_name=self.group_name, company_name=self.company_name, staffs=[self.staffs[item]]) def __len__(self): return len(self.staffs) def __iter__(self): # 实现该魔法函数,可以使这个类成为一个可迭代的对象 return iter(self.staffs) def __contains__(self, item): if item in self.staffs: return True else: return False staffs = ["bobby1", "imooc", "bobby2", "bobby3"] group = Group(company_name="imooc", group_name="user", staffs=staffs) print(group[:2]) reversed(group) for user in group: print(user)