python的__getitem__(),__setitem__(), __len__()

     看ONMT代码,发现有处直接使用iter(obj),直接蒙了,直接将内置的iter函数作用于对象。后来发现这个对象里实现了__getitem__()方法。

   先看示例:

class Test:
  def __init__(self):
    self.l = [4,5,6,7]

  def __getitem__(self, item):
    return self.l[item]
t = Test()
iter_t = iter(t)
for i in iter_t:
  print(i)

#更常见的用法
class Test1:

  def __init__(self, text):
    self.text = text

  def __getitem__(self, index):
    result = self.text[index].upper()
    return result
print("------------------------")
p = Test1("abcd")
for char in p:
  print(char)

结果
4
5
6
7
A
------------------------
A
B
C
D

python中除了可以使用内建的类型,如list,tuple,dict。还可以创建自己的对象来实现 像 这些内建类型的访问,但需要在定义类的时候实现一些魔法方法:

class Student:
  def __init__(self, name, age, sex, height):
    self.info = {"name":name, "age":age, "sex":sex, "height":height}
  def __getitem__(self, item):
    return self.info[item]
  def __setitem__(self, key, value):
    self.info[key] = value
  def __len__(self):
    return len(self.info)
s = Student(name='ming', age=18, sex="男", height=178)
print(s['name'])
print(s['sex'])
s['sex'] = '女'
print(s['sex'])
print(len(s))

结果:
ming
男
女
4




class P:
  def __init__(self,a,b,c):
    self.l = [a,b,c]
  def __getitem__(self, item):
    return self.l[item]
  def __setitem__(self, key, value):
    self.l[key] = value
  def __len__(self):
    return len(self.l)
p = P(1,2,3)
print(p[0])
print(p[2])
p[0] = "lsj"
print(p[0])
print(len(p))

结果:
1
3
lsj
3

实现这些方法可以方便的访问对象内部元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值