Python内建属性getattribute拦的功能和用法是什么
Admin 2022-08-31 群英技术资讯 702 次浏览
今天就跟大家聊聊有关“Python内建属性getattribute拦的功能和用法是什么”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“Python内建属性getattribute拦的功能和用法是什么”文章能对大家有帮助。而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。
可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际开发中用户都需要重写后才会使用。
对于python来说,属性或者函数都可以被理解成一个属性
1.重写__getattribute__方法
class Student(object):
country = "china" #类属性不会放到__dict__中
def __init__(self,name,age):
self.name = name
self.age = age
def __getattribute__(self, attr): #注意:attr是传入的属性名,不是属性值
print("开始属性校验拦截功能")
print(attr)
return object.__getattribute__(self, attr) #返回属性名
s1 = Student("tom",19)
print(Student.country,s1.country,s1.name,s1.age) #调用属性,会调用__getattribute__方法
'''注意结果,调用了四次属性,但是却只调用了3次 __getattribute__方法。
开始属性校验拦截功能
country
开始属性校验拦截功能
name
开始属性校验拦截功能
age
china china tom 19
'''
分析总结:
1.__getattribute__ 是属性访问拦截器,就是当这个类的属性被实例访问时,会自动调用类的__getattribute__方法。
当实例调用属性时,比如s1.name,会把name作为实参传进__getattribute__方法中,经过一系列操作后,再把name处理后的结果返回。
Python中只要定义了继承object的类,就默认存在属性拦截器,只不过是拦截后没有进行任何操作,而是直接返回。所以我们可以自己改写__getattribute__方法来实现相关功能,比如查看权限、打印log日志等。
2.如果重写了__getattribute__,则类会调用重写的方法,所以这个方法必须要有renturn返回值,返回传进去的属性,否则调用属性会出现失败的情况。
3.注意如果是直接用类名.类属性的形式调用类属性,是不会调用 __getattribute__方法。
class Student(object):
country = "china" #类属性不会放到__dict__中
def __init__(self,name,age):
self.name = name
self.age = age
def __getattribute__(self, attr): #注意:attr是传入的属性名,不是属性值
print("开始属性校验拦截功能")
print(attr)
if attr == "name": #注意这里引用原属性名不用self,直接引号引起来即可。
print("现在开始调用的是name属性")
elif attr =="age":
print("现在开始调用的是age属性")
else:
print("现在调用的是其他属性")
return object.__getattribute__(self, attr) #返回属性名
s1 = Student("tom",19)
print(s1.name,s1.age,s1.country)
'''结果如下:
开始属性校验拦截功能
name
现在开始调用的是name属性
开始属性校验拦截功能
age
现在开始调用的是age属性
开始属性校验拦截功能
country
现在调用的是其他属性
tom 19 china
'''
1.__getattribute__(self,*args,**kwgs)中传入的参数是属性名,不是属值,很多初学者有误区。
2.使用类名调用类属性时,不会经过__getattribute__方法,只争取实例对象对属性的调用,包括调用类属性
3.__getattribute__是属性拦截器,属性调用会传入处理,最后要有返回值,将传入属性处理后返回给调用者。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Python的num指什么,主要提供什么功能?其实num就是函数numpy的缩写。
这篇文章主要介绍了Pandas 如何处理DataFrame中的inf值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
在NumPy中,矩阵是ndarray的子类,与数学概念中的矩阵一样,NumPy中的矩阵也是二维的,可以使用 mat 、 matrix 以及 bmat 函数来创建矩阵。本文将详细讲解NumPy中矩阵和通用函数的使用,感兴趣的可以了解一下
这篇文章主要为大家详细介绍了python单向循环链表实例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要介绍了python数据分析之DateFrame数据排序和排名方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008