|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位大神:
我在看小甲鱼Python视频类和对象(XI)-属性访问相关魔法方法中讲解__getattr__()魔法方法的例子时,例子如下:
class C:
def __init__(self, name, age):
self.name = name
self.__age = age
def __getattribute__(self, attrname):
print('拿来吧你')
return super().__getattribute__(attrname)
def __getattr__(self, attrname):
if attrname =='FishC':
print('I love FishC')
else:
raise AttributeError(attrname)
问题: 为什么当我们访问一个不存在的属性,那么__getattribute__()为啥依然会被先响应?
即:
c.x
拿来吧你
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Input In [4], in <cell line: 1>()
----> 1 c.x
Input In [1], in C.__getattr__(self, attrname)
10 print('I love FishC')
11 else:
---> 12 raise AttributeError(attrname)
AttributeError: x
这个问题视频里面也是有说过的,你可以理解为,当进行属性访问时,会先去自己的属性字典里面查找在不在已有属性里面,这个查找就需要先访问__getattribute__(self, attrname)魔法方法,如果找不到这个属性,才会去执行 __getattr__(self, attrname)魔法方法
|
|