传送门

  1. https://docs.python.org/3/reference/datamodel.html#object.__getattr__
  2. https://docs.python.org/3/reference/datamodel.html#object.__getattribute__
  3. https://stackoverflow.com/questions/4295678/understanding-the-difference-between-getattr-and-getattribute
  4. https://stackoverflow.com/questions/3278077/difference-between-getattr-vs-getattribute

区别

  1. 当正常访问属性失败,即f.x,x不存在,会触发__getattr__
  2. 无论有无f.x,都会触发__getattibute__

Talk is cheap

__getattr__单个出现

class Foo:

    def __init__(self, x):
self.x = x def __getattr__(self, item):
#return self.__dict__[item]
return '__getattr__' f1 = Foo(1)
print(f1.x)
print(f1.xxxxxx) #访问不存在的属性访问,触发__getattr__

__getattribute__单个出现

class Foo:

    def __init__(self, x):
self.x = x def __getattribute__(self, item):
return '__getattribute__' f1 = Foo(1)
print(f1.x) # 访问存在的属性,也会直接执行__getattribute__
print(f1.xxx) # 访问不存在的属性,也会直接执行__getattribute__

__getattr__和__getattibute__同时存在

class Foo:

    def __init__(self, x):
self.x = x def __getattr__(self, item):
return '执行的是我,__getattr__'
# return self.__dict__[item] def __getattribute__(self, item):
print('不管属性是否存在,我都执行,__getattribute__')
raise AttributeError('__getattribute__的AttributeError') f1 = Foo(1)
# 当两者同时存在的时候,只会执行__getattribute__;如果在__getattribute__过程中抛出AttributeError,那么就执行__geattr__
print(f1.x)
# print(f1.xx)

18+ Warning

最好不要使用__getattribute__,不然有可能导致无限递归的可能。

最新文章

  1. C++中虚析构函数的作用
  2. Hibernate入门6.Hibernate检索方式
  3. bzoj2823
  4. jquery easyui datagrid 分页 详解(java)
  5. Use powerful plugins in your vim.
  6. [Audio processing] 常见语音特征 —— LPC
  7. 从零开始学C++之构造函数与析构函数(三):深拷贝与浅拷贝、空类
  8. SQL 之存储过程
  9. 【转载】 Sqlserver中查看自定义函数被哪些对象引用
  10. web富文本编辑器收集
  11. yii2部署nginx
  12. python-异常处理、元类
  13. 006 使用SpringMVC开发restful API四--用户信息的修复与删除,重在注解的定义
  14. zookeeper使用
  15. 弹出框插件——dialog
  16. 1.浅谈CLR
  17. 数据存储(直接写入、NSUserDefaults、NSkeyedArchiver)
  18. java中<load-on-startup>含义
  19. Ocelot中文文档入门
  20. T-SQL 之 存储过程

热门文章

  1. webpack 打包CSS 引入图片
  2. MySQL学习(六)change-buffer
  3. zabbix4.2安装配置指南
  4. HTML5学习(2)语义化
  5. 每天进步一点点------ORCAD Capture CIS
  6. PHP无法获取.env文件设置的值
  7. Object.fromEntries
  8. FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮
  9. jquery 相同ID 绑定事件
  10. sklearn 线性回归