zoukankan      html  css  js  c++  java
  • \_\_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,两个都会被执行
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    awk-使用
    缓存使用
    一致性hash-java实现treemap版
    线程同步-CountDownLatch
    一致性hash算法
    linux-配置字符串-grep
    linux-查找命令-find
    linux-网络监控命令-netstat进阶
    linux-网络监控命令-netstat初级
    linux-单引号、双引号、反引号的区别。
  • 原文地址:https://www.cnblogs.com/randysun/p/12251646.html
Copyright © 2011-2022 走看看