优草派 > 问答 > Python

对比Python中__getattr__和 __getattribute__获取属性的用法

作者:tangjs0419     

在Python中,有两个方法可以用来获取对象属性:__getattr__和__getattribute__。这两个方法的作用虽然相似,但是在使用的时候需要注意它们的差异。本文将从多个角度对这两个方法进行分析和对比。

一、基本概念

__getattr__是一个特殊方法,用于在访问一个不存在的属性时自动调用。__getattribute__也是一个特殊方法,但是它会在访问任何属性时都会被调用。

二、调用时机

__getattr__和__getattribute__的调用时机不同,__getattr__只有在访问一个不存在的属性时才会被调用,而__getattribute__会在访问任何属性时都会被调用。

三、参数传递

在__getattr__中,被访问的属性名会被作为字符串传递给该方法。而在__getattribute__中,被访问的属性名会被作为字符串传递给该方法的第一个参数self。

四、调用其他方法

在__getattr__中,可以通过返回一个方法来调用其他方法。而在__getattribute__中,调用其他方法必须使用super函数。

五、调用父类方法

在__getattr__中,调用父类方法可以使用super函数。而在__getattribute__中,要调用父类方法需要使用object.__getattribute__函数。

六、异常处理

在__getattr__中,如果没有找到属性,可以返回一个默认值或者抛出一个异常。而在__getattribute__中,如果没有找到属性,必须抛出AttributeError异常。

七、性能影响

由于__getattribute__会在访问任何属性时都会被调用,因此使用__getattribute__会影响程序的性能。而__getattr__只有在访问不存在的属性时才会被调用,因此使用__getattr__对程序的性能影响较小。

总体而言,__getattr__和__getattribute__在Python中都是非常有用的特殊方法。__getattr__适用于访问不存在的属性时进行一些特定的处理,__getattribute__适用于在访问任何属性时进行一些特定的处理。需要根据具体情况选择使用哪个方法。

5天短视频训练营
新手入门剪辑课程,零基础也能学
分享变现渠道,助你兼职赚钱
限时特惠:0元
立即抢
新手剪辑课程 (精心挑选,简单易学)
第一课
新手如何学剪辑视频? 开始学习
第二课
短视频剪辑培训班速成是真的吗? 开始学习
第三课
不需要付费的视频剪辑软件有哪些? 开始学习
第四课
手机剪辑app哪个好? 开始学习
第五课
如何做短视频剪辑赚钱? 开始学习
第六课
视频剪辑接单网站APP有哪些? 开始学习
第七课
哪里可以学短视频运营? 开始学习
第八课
做短视频运营需要会什么? 开始学习
相关问题
sql判断字段是否存在
python键值对
for循环可以遍历字典吗
怎么使用vscode
查看更多

客服热线:0731-85127885

湘ICP备19005950号-1  

工商营业执照信息

违法和不良信息举报

举报电话:0731-85127885 举报邮箱:tousu@csai.cn

优草派  版权所有 © 2024