python中的__getattr__()和__getattribute__()

__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__()魔法方法

最后,有喜欢博主写的内容的伙伴可以收藏加关注哦!

猜你喜欢

转载自blog.csdn.net/weixin_44604586/article/details/106930487