两个魔法方法的使用
__getattr__魔法方法
- 如果一个类里定义了
__getattr()__
魔法方法,然后调用了一个不存在的属性,则会触发__getattr()__
这个方法。其中参数item是所调用的不存在的属性 - 示例代码
class A(object): def __init__(self, name): self.name = name def __getattr__(self, item): return item a = A('小明') print(a.name) # 小明 print(a.age) # age
__getattribute__魔法方法
- 通过实例属性,无条件被调用,可以当做拦截器使用
- 如果同时存在
__getattr__()
和__getattribute__()
魔法方法,则会优先调用__getattribute__()
- 示例代码
从上面代码的输出结果可以知道class A(object): def __init__(self, name): self.name = name def __getattr__(self, item): return item def __getattribute__(self, item): print("开始拦截%s" % item) return item # 返回属性名 a = A('小明') print(a.name) # 开始拦截name name print(a.age) # 开始拦截age age
__getattr__()
没有被调用 - 注意:如果不是特殊情况,不要使用
__getattribute__()
魔法方法
最后,有喜欢博主写的内容的伙伴可以收藏加关注哦!