item系列

#__setitem__赋值方法,在进行obj[name]=value时,会触发执行该方法
#__delitem__删除方法,在进行del obj[name],就会触发执行该方法
#__getitem__查询方法,在进行读取obj[name]的值时,就会触发执行该方法
#把对象操作属性模拟成字典的格式
#item系列与attr系列都是方法,都是在定义阶段,而反射是内置函数,是在使用阶段
#item系列是在对象进行字典形式的操作时,在会执行相应方法,而attr系列是不同的,
class Foo:
def __init__(self,name):#2 不能有返回值
self.name =name #把实例化对象给self,name值赋给self.name,
# 即实例化对象的name属性中,3

def __getitem__(self, item): #34
return self.__dict__[item]

def __setitem__(self, key, value): #23
self.__dict__[key] =value
def __delitem__(self, key): #56
self.__dict__.pop(key)

def __str__(self): #必须有返回值,且返回值是str型 45
return str(self.__dict__)

f =Foo('egon') #执行Foo(),触发__init__(如果有),就要进行传值,然后执行__init__中的
#代码,1,当__init__执行完了,就在f空间字典中产生name属性(变量)
f['age']=18 #遇到obj[name]=value形式,就会自动触发__setitem__方法 ,22
print(f['name']) #遇到obj[name]形式,就会自动触发__getitem__方法,当该方法执行完了,
#才执行打印,33
print(f) #打印对象f,就会触发__str__方法,当执行完__str__,才会执行打印 44
#delattr(f,'age')
del f['age'] #遇到del obj[name]形式,就会自动触发__delitem__方法,55
print(f)

转载于:https://www.cnblogs.com/IQ-Python/p/6764092.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值