鱼C论坛

 找回密码
 立即注册
查看: 2582|回复: 3

045讲关于属性访问里getattr和getattribute的问题

[复制链接]
发表于 2016-7-30 01:06:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
教程里说__getattribute__是有这个属性时触发的,__getattr__是没有这个属性时触发的,所以动动手的0题我也很好理解,写一个__getattr__就出来了。然而,如果我加一个__getattribute__,问题就出来了,即使没有这个属性,也会直接调用__getattribute__的内容,这点我就很不理解了。
  1. class Test:
  2.     def __getattr__(self,name):
  3.         print('该属性不存在!')
  4.     def __getattribute__(self,name):
  5.         print('到底存在不存在?')
复制代码


捕获.PNG

请问应该怎么理解呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-7-30 08:33:09 | 显示全部楼层
__getattribute__  和  __getattr__ 同时在一个类中都有定义的情况下:

__getattribute__ 是无条件执行的, __getattr__ 不会被执行;
除非,
1、__getattribute__ 显式调用了 __getattr__ ,
2、__getattribute__ 触发了 AttributeError 异常。


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-30 09:10:00 | 显示全部楼层
一个正确例子~
  1. class Test:
  2.     def __getattr__(self,name):
  3.         print('该属性不存在!')
  4.     def __getattribute__(self,name):
  5.         print('到底存在不存在?')
  6.         raise AttributeError # 触发异常
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-31 18:45:18 | 显示全部楼层

谢谢!明白了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-22 00:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表