python中get_attribute,
本文主要介绍Python内置的属性getattribute拦截器的详细说明。有需要的朋友可以参考一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
00-1010简介1。内置属性__getattribute__ 2的用法。重写__getattribute__实现属性拦截功能总结要点:
目录
因为python中的所有类都默认继承object类。
object类提供了许多原始的内置属性和方法,因此用户定义的类将继承Python中的这些内置属性。
您可以使用dir()函数来查看它。虽然python提供了很多内置属性,但在实际开发中并不常用。但是系统提供的很多内置属性都需要重写,用户才能在实际开发中使用。
对于python来说,属性或函数可以理解为属性。
引言
1.重写__getattribute__方法
班级学生(对象):
类别country=china #的属性不会放在__dict__中
def __init__(自己,姓名,年龄):
self.name=name
年龄=年龄
DEF _ _ GetAttribute _ _ (self,attr) : #注意:attr是传入的属性名,不是属性值。
打印(“启动属性验证的拦截功能”)
打印(属性)
返回对象。_ _ getattribute _ _ (self,attr) #返回属性名
s1=学生(“汤姆”,19岁)
Print (student.country,s1.country,s1.name,s1.age) #调用属性将调用__getattribute__方法。
注意结果,属性被调用了四次,但是只有__getattribute__方法被调用了三次。
启动属性验证拦截功能。
国家
启动属性验证拦截功能。
名字
启动属性验证拦截功能。
年龄
中国中国汤姆19
分析摘要:
1.__getattribute__是一个属性访问拦截器,即当这个类的属性被实例访问时,会自动调用该类的__getattribute__方法。
当一个实例调用一个属性,比如s1.name,它会把名称作为参数传入__getattribute__方法,经过一系列操作后,它会返回名称的处理结果。
只要在Python中定义了继承object的类,默认都有一个属性拦截器,但是拦截之后不做任何事情,直接返回。所以我们可以自己重新编写__getattribute__方法来实现相关功能,比如查看权限,打印日志日志等。
2.如果__getattribute__被重写,该类将调用被重写的方法,因此该方法必须有一个return返回值以返回传入的属性,否则,调用该属性将失败。
3.注意,如果以类名和类属性的形式直接调用class属性,将不会调用__getattribute__方法。
1.内建属性__getattribute__的用法
班级学生(对象):
类别country=china #的属性不会放在__dict__中
def __init__(自己,姓名,年龄):
self.name=name
年龄=年龄
DEF _ _ GetAttribute _ _ (self,attr) : #注意:attr是传入的属性名,不是属性值。
打印(“启动属性验证的拦截功能”)
打印(属性)
Ifattr== name 3360 #注意,这里引用的原属性名不是self,可以直接引用。
Print(现在调用name属性)
elif attr==age:
Print(现在调用age属性)
else:
Print(“现在正在调用其他属性”)
返回对象。_ _ getattribute _ _ (self,attr) #返回属性名
s1=学生(“汤姆”,19岁)
打印(s1 .姓名,s1 .年龄,s1 .国家)
结果如下:
启动属性验证拦截功能。
名字
现在name属性被调用。
启动属性验证拦截功能。
年龄
现在年龄属性被称为。
启动属性验证拦截功能。
国家
现在其他属性被称为。
汤姆19中国
2.重写__getattribute__实现属性拦截功能
1._ _ getattribute _ _ (self,*args,**kwgs)传入的参数是属性名,而不是属性值。很多初学者都有误区。
2.使用类名调用类属性时,不会经过__getattribute__方法,只争取实例对象调用属性,包括调用类属性。
3.__getattribute__是一个属性拦截器。属性调用将被传入并处理。最后,应该有返回值。传入的属性将被处理并返回给调用者。
以上是Python内置属性getattribute拦截器的详细说明。关于Python内置属性getattribute拦截器的更多信息,请关注盛行的IT软件开发工作室的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。