Justin-刘清政的博客

python/面向对象高阶/4-__getattribute__

2020-12-21

一、getattr

  • 不存在的属性访问,触发getattr
1
2
3
4
5
6
7
8
9
10
class Foo:
def __init__(self, x):
self.x = x

def __getattr__(self, item):
print('执行的是我')
# return self.__dict__[item]


f1 = Foo(10)
1
print(f1.x)
1
10
1
f1.xxxxxx
1
执行的是我

二、getattribute

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

103-getattribute-霸道.jpg

  • 你可真霸道呀!!!
1
2
3
4
5
6
7
8
9
class Foo:
def __init__(self, x):
self.x = x

def __getattribute__(self, item):
print('不管是否存在,我都会执行')


f1 = Foo(10)
1
f1.x
1
不管是否存在,我都会执行
1
f1.xxxxxx
1
不管是否存在,我都会执行

三、getattrgetattribute

  • getattributegetattr同时存在,只会执行getattrbute,除非getattribute在执行过程中抛出异常AttributeError
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#_*_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)
1
f1.x
1
2
不管是否存在,我都会执行
执行的是我
1
f1.xxxxxx
1
2
不管是否存在,我都会执行
执行的是我
使用支付宝打赏
使用微信打赏

点击上方按钮,请我喝杯咖啡!

扫描二维码,分享此文章