class Foo:x = 1def __init__(self,y):self.y = ydef __getattr__(self,item):print("---->from getattr:你找的属性不存在")def __setattr__(self,key,value):print('----> from setattr')# self.key = value # 这样就无限递归# self.__dict__[key] = value #应该这样写def __delattr__(self,item):print("---> from delattr")# del self.item# 上面的写法同样会无限递归self.__dict__.pop(item)def __getitem__(self,item):print('---->from getitem')def __setitem__(self,item,value):print('---from setitem')def __delitem__(self,item):print('---->from __delitem__')
# __setattr__:添加/修改属性就会触发它的执行
# 写的原理就是将属性和值写进对象的底层字典中,而我们重新写了
# __setattr__ 方法,所以不会写进去底层字典。
f1 = Foo(10)
f1['y'] = 10  # 触发__setitem__ 方法
print(f1.__dict__)
print(f1.__dict__)
f1.z = 3 # # 触发__setattr__
print(f1.__dict__)
# 除非是直接对底层字典进行操作,否则我们是永远无法赋值
f1.__dict__['z'] = 3
print(f1.z) # 3
# 此时f1 就有了z 属性
# __delattr__删除属性的时候会触发
f1.__dict__['a'] = 5
print(f1.__dict__) #{'z': 3, 'a': 5}
del f1.a # 触发__delattr__方法
del f1['a'] # 触发__delitem__方法
print(f1.__dict__) # {'z': 3}
# __getattr__ 只有在点调用属性且属性不存在的时候才会触发
f1.anc # 打印:---->from getattr:你找的属性不存在
f1['anc'] # 打印:---->from getitem:你找的属性不存在

转载于:https://www.cnblogs.com/cong12586/p/11371935.html

__setattr__,__getattr__,__delattr__相关推荐

  1. python中setattr用法_python 中__setattr__, __getattr__,__getattribute__, __call__使用方法

    object._getattr_(self, name) 拦截点号运算.当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法.如果继承树可以找到该属性,则不调用此方法 实例in ...

  2. python 内置属性__setattr___python 自定义属性访问 __setattr__, __getattr__,__getattribute__, __call__...

    object._getattr_(self, name) __gettattr__:如果某个类定义了这个方法,并且在该类的对象的字典中又找不到相应的属性时候,那么该方法会被调用. 实例instance ...

  3. python面对对象编程-------5:获取属性的四种办法:@property, __setattr__(__getattr__) ,descriptor...

    一:最基本的属性操作 1 class Generic: 2 pass 3 4 g= Generic() 5 6 >>> g.attribute= "value" ...

  4. __getattribute__()、__getattr__()、__setattr__()、__delattr__()

    访问顺序: 实例的__getattribute__().Descriptor的__get__().实例的__dict__.只读Descriptor的__get__().实例的__getattr__() ...

  5. Python基础教程:__setattr__和__delattr__和__getattr__的用法

    学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895,817, 687 有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家一起学习交流! 一.__ se ...

  6. Python__getattr__、__setattr__、__delattr__、__getitem__、__setitem__、__getattribute__方法的理解

    1. __getattr__(self, item): 在访问对象的item属性的时候,如果对象并没有这个相应的属性,方法,那么将会调用这个方法来处理...这里要注意的时,假如一个对象叫fjs,  他 ...

  7. __setattr__,__getattr__,__getattribute__

    1,__getattribute__ 当实例调用某个属性或方法时,首先会调用__getattrbute__,也就是相当于默认调用该方法(隐含默认调用,无论何种情况,均会调用此方法). class Te ...

  8. python __setattr__ , __getattr__

    Python Class 对象或类型通过内置成员 __dict__ 来存储成员信息. 我们还可以通过重载 __getattr__ 和 __setattr__ 来拦截对成员的访问,需要注意的是 __ge ...

  9. python setattribute_python __setattr__ , __getattr__ , __setattribute__ 防止死循环 | 学步园

    Python Class 对象或类型通过内置成员 __dict__ 来存储成员信息. 我们还可以通过重载 __getattr__ 和 __setattr__ 来拦截对成员的访问,需要注意的是 __ge ...

  10. python(7)– 类的反射

    python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...

最新文章

  1. Ubuntu 卸载 Nvidia 驱动和安装最新驱动
  2. 当对象不再使用时,不赋值为 null 会导致什么后果?
  3. Android的BroadcastReceiver 广播 短信拦截
  4. 关于地图添加大量marker点进行卡顿问题
  5. python修改类的属性值_python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值...
  6. 10个你必须知道的Python内置函数
  7. 【转载】使用 gnuplot 在网页中显示数据
  8. SQL server中DateTime类型字段如何赋值零?
  9. linux网络编程之网络字节序、主机字节序、大端、小端
  10. 2020,国产 AI 开源框架“剑指”TensorFlow、PyTorch
  11. 151. 反转字符串里的单词
  12. 原来神经网络是一种图?
  13. iOS:定制自适应大小的透明吐司弹框
  14. html 游戏 消消乐,html5叠房子消消乐小游戏代码
  15. 才在enom注册了10多个域名,就有人想盗我邮箱
  16. Nginx开启GZIP压缩,提升前端访问速度
  17. iQOONeo6SE和红米k40区别 哪个好 iQOONeo6SE和红米k40哪个值得买 两者配置对比
  18. java设计模式之策略模式应用:订单手续费计算
  19. What is RSS?
  20. Linux主机肉鸡木马minerd导致CPU跑满

热门文章

  1. NLP学习04--长短期记忆网络LSTM
  2. Flink CDC 系列 - 构建 MySQL 和 Postgres 上的 Streaming ETL
  3. Nexmark: 如何设计一个流计算基准测试?
  4. 音视频的采集、编码、封包成 mp4 输出
  5. java项目在本地部署_jenkins部署java项目在本地(三)
  6. 循环结果添加到集合_Excel VBA 8.4 Python中有集合直接获取唯一值,那Exce中可以吗?...
  7. 多示例代码:go语言中循环练习题,不包括break,continue
  8. c语言编程菜单流程图,C语言课程设计————写下流程图! 谢谢
  9. python整型图_基于PIL的图像整形与裁剪矢量化
  10. 使用Gensim进行主题建模(二)