|
发表于 2020-6-17 13:51:27
From FishC Mobile
|
显示全部楼层
|阅读模式
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 hrp 于 2020-6-17 15:00 编辑
百度了一下都是C++的,不知道python能不能实现,对应哪个魔法方法。
PS:小甲鱼的视频教程我才看到20几集,不知道有没有讲过,我自己看的有点拖拖拉拉,别喷我
补充:就是这个 [ ]运算符,比如list1[2:5]。我定义的类的实例a,能否通过重载[]实现用a[2:5]替代a.func(2, 5)。
本帖最后由 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
复制代码
|
|