python getattribute方法_python3面对像进阶--__getattribute__()

__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    # 不存在的属性访问,触发__getattr__

__getattribute__

class Foo:

def __init__(self, x):

self.x = x

def __getattribute__(self, item):

print('不管是否存在,我都会执行')

f1 = Foo(10)

f1.x

f1.xxxxxx

raise 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         # 不管是否存在,我都会执行 → 执行的是我

# 当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,

# 除非__getattribute__在执行过程中抛出异常AttributeError

再次注意:当__getattribute__()与__getattr__()同时存在,只会执行__getattrbute__(),除非__getattribute__()在执行过程中抛出异常AttributeError

其实相当于__getattribute__()是__getattr__()的老大,当__getattribute__()方法抛出异常AttributeError()时,自动调用__getattr()__。

__getattr()__只接受AttributeError()的错误信息才运行。其他错误信息一律不接受。

__getattr()__只接受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 TabError('哈哈')

f1 = Foo(10)

f1.x

f1.xxxxxx

__getattr()__只接受AttributeError()的错误信息运行结果:

不管是否存在,我都会执行

Traceback (most recent call last):

File "H:/Flask/shiyanlou/laonanhai/__getattribute__.py", line 43, in

f1.x

File "H:/Flask/shiyanlou/laonanhai/__getattribute__.py", line 39, in __getattribute__

raise TabError('哈哈')

TabError: 哈哈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值