python中对象的Attribute拦截__getattribute__()

风流意气都作罢 提交于 2020-03-29 15:46:35

之前一直有个疑惑,访问一个对象中的未定义的属性和方法时报的错误信息都是一样的AttributeError:

 

明明调用的是方法haha()却说是属性。后来发现python的基类中有个内建方法__getattribute__(),当访问某个实例的属性或方法时就会调用这个内建方法,再在里面返回对应的属性或方法的引用。

 

 

 

如上,当执行t.func()时,先调用__getattribute__()方法,将func当成字符串“func”传进去,查找匹配后返回方法func的引用。再在后面加个()就可以调用执行了。

__getattribute__()有个坑,就是return 后面不能直接写self.属性名,不然会循环调用getattribute方法出不来了,会报错:

RecursionError: maximum recursion depth exceeded while calling a Python object。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!