总溜达の跕
gft.baidu/
https://dmog.net?bdrgnm我们先对属性进行访问
看来实例test访问属性通过了内建方法__getattribute__,那么我们再对访问类方法
我们发现内建方法__getattribute__再次被调用了。所以,实例访问属性和调用方法,是没有区别的。
拓展
我们又重写了__getattr__和__setattr__,那么这两个是干什么的呢。
哦,原来对实例添加属性并赋值的时候,会调用__setattr__,而访问属性,还是老方法。如果对没有的属性进行访问,就会抛出AttributeError,这时候,为了避免这种情况,__getattr__就派上了用处。
首先访问属性four,在实例作用域并没有找到,再去对应类的作用域,依然未找到,解释器就会抛出AttributeError,这时候__getattr__就会调用(当程序抛出Attribute时),这时候就会返回我们设置的默认值。