hrp 发表于 2020-6-17 13:51:27

python怎么重载下标运算符(不知道是不是这么叫的)

本帖最后由 hrp 于 2020-6-17 15:00 编辑

百度了一下都是C++的,不知道python能不能实现,对应哪个魔法方法。
PS:小甲鱼的视频教程我才看到20几集,不知道有没有讲过,我自己看的有点拖拖拉拉,别喷我{:10_245:}

补充:就是这个 [ ]运算符,比如list1。我定义的类的实例a,能否通过重载[]实现用a替代a.func(2, 5)。

Twilight6 发表于 2020-6-17 13:52:27

什么意思.......哈哈

Hoiste 发表于 2020-6-17 13:53:25

如果不会打出来至少截个图看看。。

hrp 发表于 2020-6-17 15:02:06

Twilight6 发表于 2020-6-17 13:52
什么意思.......哈哈

帖子更新了,麻烦大佬看一看{:10_250:}

hrp 发表于 2020-6-17 15:02:48

Hoiste 发表于 2020-6-17 13:53
如果不会打出来至少截个图看看。。

帖子更新了,麻烦大佬看一看{:10_250:}

Twilight6 发表于 2020-6-17 15:03:06

hrp 发表于 2020-6-17 15:02
帖子更新了,麻烦大佬看一看

哈哈 我去试试.... 我不是大佬噻~{:10_297:}

Stubborn 发表于 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)
      elif isinstance(item, numbers.Integral):
            return cls(name=self.name, company=self.company, staffs=])

    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
页: [1]
查看完整版本: python怎么重载下标运算符(不知道是不是这么叫的)