zoukankan      html  css  js  c++  java
  • __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)
    
    10
    
    f1.xxxxxx
    
    执行的是我
    

    二、__getattribute__

    • 查找属性无论是否存在,都会执行

    103-getattribute-霸道.jpg?x-oss-process=style/watermark

    • 你可真霸道呀!!!
    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
    #_*_coding:utf-8_*_
    __author__ = 'Linhaifeng'
    
    
    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
    
    不管是否存在,我都会执行
    执行的是我
  • 相关阅读:
    python(对象与实例属性)
    python(类和对象相关知识)
    python(面向对象设计)
    网络基础知识
    python(hashlib)
    子网掩码划分
    cmd命令
    Linux学习第一天:Linux常用快捷键
    python猜数字小游戏
    while语句
  • 原文地址:https://www.cnblogs.com/nickchen121/p/10991198.html
Copyright © 2011-2022 走看看