我们已经准备好了,你呢?

2026我们与您携手共赢,为您的企业形象保驾护航!

Python内建属性getattribute拦截器怎么使用

本篇文章将详细阐述“内建属性拦截器的应用方式”,对此话题感兴趣的朋友们不妨一阅。文中介绍的使用方法既简便又高效,极具实用性。接下来,就请跟随小编一起学习“内建属性拦截器的使用技巧”吧!

引言

因为中所有类默认继承类。

而这类编程实体预设了众多基础属性与操作,因此,用户自定义的编程实体同样能够继承这些预设的基础属性。

通过dir()函数可以查阅,尽管它提供了众多内置属性,但在实际开发过程中,我们常用的并不多。实际上,许多系统所提供的内置属性,用户在开发时往往需要重新编写后才能投入使用。

对于来说,属性或者函数都可以被理解成一个属性

1.内建属性的用法

定义了Student类,继承自object,其中包含一个类属性country表示国家为"china",不存储在实例的__dict__中。在Student类中,构造函数__init__用于初始化实例的name和age属性。自定义了属性获取方法__getattribute__,用于拦截属性访问,打印属性名,并最终调用object类的__getattribute__方法来获取属性值。创建了Student实例s1,名为"tom",年龄19岁。当打印Student类的country属性和s1的country、name、age属性时,会触发__getattribute__方法,但实际调用次数为三次。启动国家属性校验拦截机制,随后激活姓名属性校验拦截机制,再接着开启年龄属性校验拦截机制。针对国家信息,检查为“china”;对于姓名,验证为“tom”;至于年龄,核实为“19”。

分析总结:

这是一种属性访问拦截机制,每当该类的属性被实例所访问,便会自动触发类中相应的方法执行。

在实例调用属性的过程中,例如执行s1.name,会将name作为参数传递给方法,随后方法进行一系列操作,最终将处理过的name结果返回。

一旦确定了要继承的类,系统便会自动设置属性拦截机制,但该机制在拦截后并未执行任何操作,而是直接将结果返回。因此,我们可以自行修改方法,以实现诸如权限检查、记录日志等特定功能。

若对内容进行修改,则该类将调用重写功能,因此该功能必须返回传入的属性,否则在调用属性时将遭遇失败。

若直接采用类名加点号加类属性的方式访问类属性,则无法触发相应的方法执行。

2.重写实现属性拦截功能

Student类中定义了国家属性为"china",并且该类属性不会存储在__dict__字典中。构造函数__init__接受name和age两个参数,并将它们分别赋值给实例的name和age属性。当尝试获取实例的属性时,会触发__getattribute__方法,该方法会输出“开始属性校验拦截功能”的信息,并打印出尝试获取的属性名。如果属性名为"name",则会进行相应的处理。显示信息:“当前正在访问的是name属性”……若属性标识为"age",则输出:“当前正在访问的是age属性”……若属性标识不属于上述两种,则显示:“当前访问的是其他属性”……并执行返回操作,输出object对象中self的attr属性值。创建学生对象s1,名为"tom",年龄19,国籍为"china",输出s1的name、age和country属性值。输出结果为:“开始属性校验拦截功能”,“现在开始调用的是name属性”,“开始属性校验拦截功能”,“现在开始调用的是age属性”,“开始属性校验拦截功能”,“现在调用的是其他属性”,“tom”,“19”,“china”。

总结要点:

在(self,*args,**)这一结构中,输入的应当是属性名称而非属性值,这一点很多新手容易产生误解。

在调用类属性时,若通过类名直接引用,则不会触发方法执行,而是直接尝试访问实例对象的属性,这涵盖了包括对类属性的访问在内。

此为属性拦截器,每当属性被调用时,都会进行相应的处理,处理完毕后,需将处理过的属性值返回给调用者。

至此,大家对于“内建属性拦截器的运用方法”应该有了更为透彻的认识,何不亲自实践一番呢?欢迎访问编程网,在相关栏目中探寻更多资讯,关注我们的动态,持续进步!

二维码
扫一扫在手机端查看

本文链接:https://by928.com/9541.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线