魔方方法之:__setattr__和__getattr__

魔方方法:__setattr__和__getattr__

作用:能够采用点的方式来进行取值和赋值

   如mydic..name进行取值,mydic.name='aaa'进行赋值

 

举例:字典

字典的取值方法:mydic['name']    赋值方法:mydic['name'] = 'aaa'

1
2
3
4
5
class Mydic(dict):  # 自己定义一个字典类,继承python内置的字典类
    pass
mydic = Mydic(name='aaa',age='12') # 实例化一个字典
# 正常的字典取值语法:mydic['name']  赋值方法:mydic['name']='bbb'
print(mydic['name'])  #>> aaa

 

用mydic.name的方法来赋值:__setattr__(),加点即触发该方法

用mydic.name的方法来取值:__getattr__(),加点即触发该方法 

1
2
3
4
5
6
7
8
9
10
11
12
class Mydic(dict):  # 自己定义一个字典类,继承python内置的字典类
    def __setattr__(self, key, value):
        print('对象加点赋值时,触发__setattr__方法')
        self[key] = value
 
    def __getattr__(self, item):
        print('在对象加点取值时,触发__getattr__方法')
        return self[item]
mydic = Mydic(name='aaa',age='12') # 实例化一个字典
mydic.name = 'bbb'
print(mydic)  #>>{'name': 'bbb', 'age': '12'} 证明加点赋值成功
print(mydic.age)  #>>12  证明加点取值成功

上述运行结果:

 作用:我们可以在__setattr__和__getattr__中对相应的键和值进行拦截,写入自己的操作了

posted @   EricYJChung  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示