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,两个都会被执行
    在当下的阶段,必将由程序员来主导,甚至比以往更甚。
  • 相关阅读:
    我的期末可以加分项
    冲刺
    公司授课管理系统
    挑战赛题终于完成
    Java web 学习
    Java web 学习
    Javaweb 学习
    Base64加密
    选课系统
    Educational Codeforces Round 62题解
  • 原文地址:https://www.cnblogs.com/randysun/p/12251646.html
Copyright © 2011-2022 走看看