__getattr__、__getattribute__
是python类中对属性操作的两个重要的魔法函数
__getattr__
:在查找不到属性的时候调用
from datetime import date,datetime
class User:
def __init__(self,name,birthday):
self.name=name
self.birthday=birthdaydef __getattr__(self,item):
return "not find attr"if __name__="__main__":
user=User("hobby",date(year=1998,month=1,day=1))
print(user.name)#返回hobby
print(user.age)#返回not find attr
该例中,user.name返回hobby,user.age返回not find attr。因为name这个属性可以找到,所以不去执行__getattr__;而age属性找不到,所以自动执行__getattr__。我们可以在该魔法函数中写一些我们自己的逻辑,进行一些转换。
例如:
from datetime import date,datetime
class User:
def __init__(self,info={}):
self.info = infodef __getattr__(self,item):
return self.info[item]if __name__="__main__":
user=User(info={"company_name":"km","name":"hobby"})
print(user.name)#输出hobby
如果没有魔法函数,就会出错,因为它没有name 这个属性,但是有了魔法函数之后,它虽然找不到name,但是可以去执行魔法函数,也就返回了
user.info[name]
。__getattribute__
:更高级,不管有没有属性,都会优先执行这个函数(无条件执行)。 【python|__getattr__、__getattribute__魔法函数】这样我们就把持了所有属性的入口了。推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)