魔方方法之:__setattr__和__getattr__


魔方方法:__setattr__和__getattr__

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

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

举例:字典

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

    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__(),加点即触发该方法 

    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__中对相应的键和值进行拦截,写入自己的操作了

相关