iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python内建属性getattribute拦截器使用详解
  • 522
分享到

Python内建属性getattribute拦截器使用详解

2024-04-02 19:04:59 522人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录引言1.内建属性__getattribute__的用法2.重写__getattribute__实现属性拦截功能总结要点:引言 因为python中所有类默认继承object类。 而

引言

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

而object类提供了了很多原始的内建属性和方法,所以用户自定义的类在Python中也会继承这些内建属性。

可以使用dir()函数可以查看,虽然python提供了很多内建属性但实际开发中常用的不多。而很多系统提供的内建属性实际开发中用户都需要重写后才会使用。

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

1.内建属性__getattribute__的用法

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__方法。

2.重写__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__是属性拦截器,属性调用会传入处理,最后要有返回值,将传入属性处理后返回给调用者。

以上就是Python内建属性getattribute拦截器使用详解的详细内容,更多关于Python内建属性getattribute拦截器的资料请关注编程网其它相关文章!

--结束END--

本文标题: Python内建属性getattribute拦截器使用详解

本文链接: https://www.lsjlt.com/news/118074.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python内建属性getattribute拦截器使用详解
    目录引言1.内建属性__getattribute__的用法2.重写__getattribute__实现属性拦截功能总结要点:引言 因为python中所有类默认继承object类。 而...
    99+
    2024-04-02
  • Python内建属性getattribute拦截器怎么使用
    本篇内容主要讲解“Python内建属性getattribute拦截器怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python内建属性getattribute拦截器怎么使用”吧!引言因为...
    99+
    2023-06-30
  • 详解struts2拦截器的使用方法
    这篇文章给大家介绍详解struts2拦截器的使用方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用str...
    99+
    2023-05-31
    struts2 st
  • Mybatis拦截器注解@Intercepts与@Signature注解属性说明
    Mybatis拦截器注解@Intercepts与@Signature注解属性说明 可能有些新手使用mybatis拦截器的时候可能没太懂@Signature注解中type,method,args的用法 首先mybatis拦截器可以拦截如下4中...
    99+
    2023-08-20
    mybatis java mysql
  • 在springboot中使用拦截器的步骤详解
    目录在springboot中使用拦截器1. 定义拦截器2. 使用JavaConfig注册拦截器3. 定义控制器,测试拦截器4. 总结在springboot中使用拦截器 拦截器Inte...
    99+
    2024-04-02
  • 详解SpringMVC拦截器配置及使用方法
    本文介绍了SpringMVC拦截器配置及使用方法,分享给大家,具体如下:常见应用场景日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。 权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接...
    99+
    2023-05-31
    spring mvc 拦截器
  • 详解SpringMVC HandlerInterceptor拦截器的使用与参数
    目录拦截器概念:拦截器VS过滤器自定义拦截器开发过程:拦截器配置项:多拦截器配置:拦截器概念: 拦截器( Interceptor)是一种动态拦截方法调用的机制,请求处理过程解析核心原...
    99+
    2024-04-02
  • 一文详解Java拦截器与过滤器的使用
    目录流程图拦截器vs过滤器SpringMVC技术架构图项目Demo依赖Interceptor拦截器Filter过滤器1、多Filter不指定过滤顺序2、多Filter指定过滤顺序流程...
    99+
    2024-04-02
  • 详解Java拦截器以及自定义注解的使用
    目录1,设置预处理,设置不需要拦截的请求2.UserTokenInterceptor ,securityInterceptor分别处理不同的请求拦截,执行不同的拦截逻辑。3.关于注解...
    99+
    2024-04-02
  • Python内置方法和属性详解
    目录1.1 _del_方法(知道)1.2 _str_ 方法总结 1.1 _del_方法(知道) 在Python中 当使用 类名()创建对象时,为对象 分配完空间后,自动 调用 _i...
    99+
    2024-04-02
  • Springboot如何利用拦截器拦截请求信息收集到日志详解
    目录1、需求2、问题2、获取1)导入依赖为了获取客户端类型、操作系统类型、ip、port2)封装获取body字符串的工具类3)拦截器类4)继承 HttpServletRequestW...
    99+
    2024-04-02
  • 如何使用Springboot实现拦截器获取header内容
    小编给大家分享一下如何使用Springboot实现拦截器获取header内容,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!分析既然需要动态获取那么只有两种方式:要么每次下游请求过来时从请求头中获取,要么定义统一的拦截器自动...
    99+
    2023-06-15
  • springboot拦截器Interceptor的使用,你都了解吗
    springmvc 中的拦截器可以对请求进行判别, 在请求到达控制器之前, 把非法的请求给拦截掉 下面来说一说, 它在springboot中的使用 拦截器是可以有多个的, 对不同的 ...
    99+
    2024-04-02
  • SpringMVC拦截器和异常处理器使用示例超详细讲解
    目录拦截器1、拦截器的配置2、拦截器的三个抽象方法3、多个拦截器的执行顺序异常处理器1、基于配置的异常处理2、基于注解的异常处理拦截器 1、拦截器的配置 SpringMVC中的拦截器...
    99+
    2024-04-02
  • .NET中间件与VUE拦截器联合使用详情
    前言: 工作中遇见的问题,边学边弄,记录一下Vue的UI库使用的是antvue 3.2.9版本的。 业务逻辑 特性: //特性 public class ModelEsig...
    99+
    2024-04-02
  • 使用Axios拦截器解决前端并发冲突
    这篇文章主要讲解了“使用Axios拦截器解决前端并发冲突”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用Axios拦截器解决前端并发冲突”吧!背景并发冲突...
    99+
    2024-04-02
  • Python中property属性的用处详解
    目录前言限制值使用 @property 的方式代替。动态属性的好处动态显示附:用property代替getter和setter方法总结前言 Python 动态属性的概念可能会被面试问...
    99+
    2024-04-02
  • python中内置类型添加属性问题详解
    目录python中内置类型添加属性问题?普通对象绑定属性解决方法总结python中内置类型添加属性问题? 最近项目 进行重构一些代码: 写代码过程中会遇到一个问题,我希望通过内置类型...
    99+
    2024-04-02
  • javaDisruptor构建高性能内存队列使用详解
    目录Java中有哪些队列Disruptor简单使用简单使用核心组件带着问题来解析代码?解决伪共享问题什么是伪共享问题呢?Disruptor是如何解决的呢?回顾总结:Disuptor为...
    99+
    2022-12-09
    java Disruptor构建内存队列 Disruptor 内存队列
  • vue3name属性的使用技巧详解
    目录引言使用步骤引言 如果你在 vue3 开发中使用了 <script setup> 语法的话,对于组件的 name 属性,需要做一番额外的处理。 对于 vue@3.2....
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作