• \_\_getattribute\_\_


    __getattribute__

    一、__getattr__

    • 不存在的属性访问,触发__getattr__
    class Foo:
        def __init__(self, x):
            self.x = x
    
        def __getattr__(self, item):
            print('执行的是我')
            # return self.__dict__[item]
    
    
    
    
    f1 = Foo(10)
    print(f1.x)
    f1.xxxxxx
    
    

    10

    执行的是我

    二、__getattribute__

    • 查找属性无论是否存在,都会执行
    class Foo:
        def __init__(self, x):
            self.x = x
    
        def __getattribute__(self, item):
            print('不管是否存在,我都会执行')
    
    
    f1 = Foo(10)
    
    
    f1.x
    f1.xxxxxx
    
    

    不管是否存在,我都会执行

    不管是否存在,我都会执行

    三、__getattr__与__getattribute__

    • 当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,除非__getattribute__在执行过程中抛出异常AttributeError
    class Foo:
        def __init__(self, x):
            self.x = x
    
        def __getattr__(self, item):
            print('执行的是我')
            # return self.__dict__[item]
        def __getattribute__(self, item):
            print('不管是否存在,我都会执行')
            raise AttributeError('哈哈')
    
    
    f1 = Foo(10)
    
    
    f1.x
    
    f1.xxxxxx
    
    

    不管是否存在,我都会执行
    执行的是我


    不管是否存在,我都会执行
    执行的是我

    四、总结

    1. 当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,
    2. 只要__getattribute__在执行过程中抛出异常AttributeError,两个都会被执行
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    网络安全专家教你设置史上最安全的WiFi密码
    Python语言为什么被称为高级程序设计语言?
    常用组件
    小程序路由
    小程序的生命周期函数
    小程序案例-查询天气
    第一个小程序,获取用户名和用户头像
    小程序util.js的使用
    小程序文件夹目录分析 转
    特效 css3 渐变背景框
  • 原文地址:https://www.cnblogs.com/randysun/p/12251646.html
Copyright © 2020-2023  润新知