__getattr__和 __getattribute__ 的用法

1、__getattr__ 的用法

当实例对象访问一个不存在的属性时,会执行 __getattr__ 方法,如果属性存在的话,就不会执行

案例

class Person:def __init__(self, name, age):self.name = nameself.age = agedef get_info(self):return f"name: {self.name}, age: {self.age}"def __getattr__(self, item):return f"获取属性 {item}"p = Person("Jack", 19)
print(p.name)  # Jack
print(p.xxx)  # 获取属性 xxx

2、__getattribute__ 的用法

不管访问的属性是否存在,一律执行此方法

也被称为属性拦截器

案例

class Person:def __init__(self, name, age):self.name = nameself.age = agedef get_info(self):return f"name: {self.name}, age: {self.age}"def __getattribute__(self, item):return f"获取属性 {item}"p = Person("Jack", 19)
print(p.name)   # 获取属性 name
print(p.xxx)    # 获取属性 xxx

3、__getattr____getattribute__ 联合使用

class Person:def __init__(self, name, age):self.name = nameself.age = agedef get_info(self):return f"name: {self.name}, age: {self.age}"def __getattr__(self, item):return f"属性 {item} 不存在"def __getattribute__(self, item):print(f"__getattribute__ {item}")return super().__getattribute__(item)p = Person("Jack", 19)
print(p.xxx)  # 获取属性 xxx

4、__getattribute__ 又被称为属性拦截器

class Person:def __init__(self, name, age):self.name = nameself.age = agedef get_info(self):return f"name: {self.name}, age: {self.age}"def __getattribute__(self, item):print(f"__getattribute__ {item}")if item == "age":return f"{item} 属性不可被访问"return super().__getattribute__(item)p = Person("Jack", 19)
print(p.age)
"""
__getattribute__ age
age 属性不可被访问
"""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90987.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90987.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息化项目验收测试实战指南

在当今数字化转型的大背景下,信息化项目验收建设已成为企业提升运营效率、优化管理流程的重要手段。然而,很多企业在投入大量资金建设信息系统后,却常常面临系统上线后无法满足实际业务需求的困境。究其原因,往往是由于忽视了信息…

牛顿拉夫逊法PQ分解法计算潮流MATLAB程序计算模型。

牛顿拉夫逊法&PQ分解法计算潮流MATLAB程序计算模型。本程序模型基于MATLAB进行潮流计算,建议先安装matpower插件(MATLAB中非常重要的潮流计算的插件)。本程序可进行牛拉法和PQ分解法潮流计算的切换,对比潮流计算的结果。很适合…

Go语言实战案例-计算字符串编辑距离

在自然语言处理、拼写纠错、模糊搜索等场景中,我们经常需要衡量两个字符串之间的相似度。编辑距离(Edit Distance) 就是一个经典的衡量方式,它描述了将一个字符串转换为另一个字符串所需的最少操作次数。 一、问题定义:什么是编辑距离? 编辑距离,也称为 Levenshtein Di…

Java时间与日期常用方法

DateDate date new Date(); //获取当前时间 System.out.println(date.getYear() 1900); // 必须加上1900 System.out.println(date.getMonth() 1); // 0~11,必须加上1 System.out.println(date.getDate()); // 1~31,不能加1Ca…

【MySQL】从连接数据库开始:JDBC 编程入门指南

个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 目录 🌟一、什么是JDBC? 🌟二、JDBC编程的步骤 ✨使用步骤 ✨DriverManger 💫定义 💫DriverManger的主要功能 …

重生之我在暑假学习微服务第一天《MybatisPlus-上篇》

本系列参考黑马程序员微服务课程,有兴趣的可以去查看相关视频,本系列内容采用渐进式方式讲解微服务核心概念与实践方法,每日更新确保知识点的连贯性。通过系统化学习路径帮助开发者掌握分布式系统构建的关键技术。读者可通过平台订阅功能获取…

odoo-060 git版本:发布/生产版本落后开发版本部署

文章目录问题起源目前解决问题起源 周五提交了一个版本,本来打算使用这个版本的,周末更新。 下一个功能比较复杂,周一提交,结果周末没有更新,导致现在还有没测试过的不能发布的。 说明: 原来只有一个mast…

YotoR模型:Transformer与YOLO新结合,打造“又快又准”的目标检测模型

【导读】在目标检测领域,YOLO系列以其高效的推理速度广受欢迎,而Transformer结构则在精度上展现出强大潜力。如何兼顾二者优势,打造一个“又快又准”的模型,是近年来研究热点之一。本文介绍的一项新研究——YotoR(You …

白杨SEO:流量的本质是打开率?搞用户搜索流量的玩法怎么做?

大家好,我是白杨SEO,专注研究SEO十年以上,全网SEO流量实战派,AI搜索优化研究者。上周六参加了生财航海家在杭州举行的私域运营大会,主题是围绕私域获客,私域IP,AI私域,精细化管理。白…

Java优雅使用Spring Boot+MQTT推送与订阅

在物联网(IoT)和智能设备横行的今天,你有没有遇到这样的问题:服务端需要实时把报警、状态更新、控制指令推送给客户端;安卓 App、嵌入式设备、网页等终端,需要轻量且稳定的连接方式;HTTP 太“重…

多目标粒子群优化(MOPSO)解决ZDT1问题

前言 提醒: 文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。 其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展…

Coze Studio概览(三)--智能体管理

本文简要分析了Coze Studio中智能体管理功能,包括功能、架构以及核心流程。Coze Studio 智能体管理功能分析 1. 智能体管理架构概览 Coze Studio的智能体管理系统基于DDD架构,主要包含以下核心模块: 后端架构层次: API层 (coze): …

idea运行tomcat日志乱码问题

原因在于idea和tomcat文件编码格式不一样。可以把idea编码改成UTF-8 File | Settings | Editor | File Encodings 里面把GBK都改成UTF-8help里面 Edit Custom VM Options 添加一行-Dfile.encodingUTF-8重启idea

Javaweb - 13 - AJAX

发送请求的几种方式1. 浏览器的地址框中输入地址,回车2. html --> head --> scrip / linkimg 自动发送请求,无需手动触发3. a 标签,form 表单标签需要手动控制提交产生,且往往需要在新的页面上获得响应信息4. 运行 JS 代码…

qt常用控件-06

文章目录qt常用控件-06spinBox/doubleSpinBoxdateTimeEditdialSliderlistWIdgettableWidgettreeWidget结语很高兴和大家见面,给生活加点impetus!!开启今天的编程之路!! 今天我们进一步c11中常见的新增表达 作者&#…

小智源码分析——音频部分(二)

一、利用创建好的对象来调用音频服务 上周从上图的getaudiocode()方法进去感受了一下底层小智的构造如何实现。所以用一个codec来接收我们所构造的音频对象。下来是用构造好的音频对象来调用音频初始化服务Initialize,因为启动函数Application函数的类中有audio_ser…

菜鸟的C#学习(四)

文章目录一、格式说明符1.1、数字格式说明符(适用于数值类型:int, double, decimal 等)1. 标准数字格式2. 自定义数字格式1.2、日期时间格式说明符(适用于 DateTime, DateTimeOffset)1. 标准日期时间格式2. 自定义日期…

基于黑马教程——微服务架构解析(二)

本篇文章基于黑马程序员的微服务课程内容,结合个人学习过程中的理解与思考进行整理。本节将围绕以下几个问题展开:什么是网关和配置管理前面那篇文章,我们了解如何把一个单体的项目拆成分布式微服务项目,并且讲解一下各个服务之间…

Text2SQL智能问答系统开发(一)

开发一个面向企业的chatBI工作流 已完成 基础 Text2SQL 功能实现 实现用户输入自然语言问题后,系统能够自动生成 SQL 并执行返回结果。用户交互优化 支持用户通过补充信息对查询进行调整,提升易用性。模糊时间处理机制 对“最近”“近期”等模糊时间关…

Python HTML模块详解:从基础到实战

一、模块体系全景图 Python生态中处理HTML的工具可分为三大层级: 标准库基础层:html模块 html.parser第三方增强层:BeautifulSoup(搭配解析器)专业级工具层:lxml requests-html 二、标准库核心模块详解…