|
发表于 2020-6-17 16:07:23
|
显示全部楼层
本楼为最佳答案
本帖最后由 Twilight6 于 2020-7-25 10:16 编辑
- class Group(object):
- """支持切片操作,实现这个协议,需要实现一下魔法函数"""
- def __init__(self, name, company, staffs):
- self.name = name
- self.company = company
- self.staffs = staffs
- def __reversed__(self):
- self.staffs.reverse()
- def __getitem__(self, item):
- """
- 注意,如果是切片,item则是一个slice,如果是取值,item是一个int
- 在对实例化对象进行索引,切片在这里实现对应的逻辑
- """
- import numbers
- cls = type(self)
- if isinstance(item, slice):
- return cls(name=self.name, company=self.company, staffs=self.staffs[item])
- elif isinstance(item, numbers.Integral):
- return cls(name=self.name, company=self.company, staffs=[self.staffs[item]])
- def __len__(self):
- """在对实例对象求长度"""
- return len(self.staffs)
- def __iter__(self):
- """返回一个迭代器,支持被遍历"""
- return iter(self.staffs)
- def __contains__(self, item):
- """实例对象支持in操作,"""
- if item in self.staffs:
- return True
- return False
复制代码 |
|