__getattribute__

1、__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
執行的是我

2、__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
不論是否存在,我都會執行

3、__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
不論是否存在,我都會執行
執行的是我
本站公眾號
   歡迎關注本站公眾號,獲取更多信息