item系列内置函数

点的方式操作属性与attr相关:

中括号的方式操作属性与item系列相关

import sys,os

BASEDIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))
sys.path.append(BASEDIR)

if name == ‘main’:

class Foo:
    x = 1
    def __init__(self, name):
        self.name = name

    def __getitem__(self, item):
        print('getitem执行啦')
        return self.__dict__[item]

    def __setitem__(self, key, value):
        print('setitem执行啦')
        self.__dict__[key] = value

    def __delitem__(self, key):
        print('delitem执行啦')
        self.__dict__.pop('name')

    def __getattr__(self, item):
        print('getattr执行啦')

    def __setattr__(self, key, value):
        print('setattr执行啦')
        self.__dict__[key] = value

    def __delattr__(self, item):
        print('delattr执行啦')

f1 = Foo('zhangli')   #触发__setattr__
f1.name = 'zhouyun'   #触发__setattr__
del f1.name        #触发__delattr__
f1.y          #在没有查找到属性时,触发__getattr__

f1['name']               #触发__getitem__
f1['name'] = 'yuanhao'    #触发__setitem__
del f1['name']           #触发__delitem__

输出:
setattr执行啦
setattr执行啦
delattr执行啦
getattr执行啦
getitem执行啦
setitem执行啦
delitem执行啦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值