关于属性访问
class A:a = 1
def __getattr__(self, item):
print('__getattr__ call')
return item
t = A()
print(t.a)
print(t.b)
# output
1
__getattr__ call
b
学到属性访问就有点懵了,现来求教:以上代码中没有b属性,为何最后还是输出了一个b?
__getattr__魔法方法是当你获取类中一个不存在的属性时会自带调用
所以你 t.a 时候因为 a 存在,不会自动调用 __getattr__ 魔法方法
而你方法 t.b 时,因为 A 类中不存在 b 属性,所以自动调用 __getattr__ 魔法方法
而 __getattr__ 魔法方法的 item 参数会自动赋值为你想获取的那个不存在的变量名
所以你 print 时打印 __getattr__ 魔法方法 返回值 即为 item 的值 b
页:
[1]