姓名:刘浩然。 2020年大目标Python

day26 Python __getattribute__

__getattr__#不存在的属性访问,触发__getattr__

class Foo:
    def __init__(self,x):
        self.x=x
    def __getattr__(self, item):
        print('执行的是我')
f1=Foo(10)
print(f1.x)
f1.xxx

结果:
10
执行的是我

 __getattribute__#无论属性存在与否都触发__getattribute__

class Foo:
    def __init__(self,x):
        self.x=x
        print('asdsad')

    def __getattribute__(self, item):
        print('不管是否存在,我都会执行')
f1=Foo(10)
f1.x
f1.xxx

结果:
asdsad
不管是否存在,我都会执行
不管是否存在,我都会执行

 __getattribute__和__getattr__结合

class Foo:
    def __init__(self,x):
        self.x=x
    def __getattr__(self, item):
        print('执行的是我')
    def __getattribute__(self, item):
        print('不管是否存在,我都会执行')
        raise AttributeError('抛出异常了')

f1=Foo(10)
f1.xc

结果:
不管是否存在,我都会执行
执行的是我
#当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,除非__getattribute__在执行过程中抛出异常AttributeError

 

posted @ 2019-02-27 15:50  pluto2charon  阅读(95)  评论(0编辑  收藏  举报