yndwk 发表于 2021-6-8 22:44:34

关于属性访问

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?

Twilight6 发表于 2021-6-8 22:53:09


__getattr__魔法方法是当你获取类中一个不存在的属性时会自带调用

所以你 t.a 时候因为 a 存在,不会自动调用 __getattr__ 魔法方法

而你方法 t.b 时,因为 A 类中不存在 b 属性,所以自动调用 __getattr__ 魔法方法

而 __getattr__ 魔法方法的 item 参数会自动赋值为你想获取的那个不存在的变量名

所以你 print 时打印 __getattr__ 魔法方法 返回值 即为 item 的值 b
页: [1]
查看完整版本: 关于属性访问