Python内置函数getattr动态获取属性或方法

news2025/1/11 10:40:28

getattr 函数解析

getattr 是 Python 内置函数,用于动态获取对象的属性或方法。它提供了灵活的方式来访问对象的成员,而无需在代码中硬编码属性名或方法名。以下是 getattr 的详细解析:

语法
getattr(object, attribute[, default])
  • object: 要从中获取属性的对象。
  • attribute: 属性名(字符串形式),可以是普通属性或方法名。
  • default(可选): 如果指定的属性不存在,则返回默认值。如果不提供且属性不存在,会抛出 AttributeError
功能
  1. 动态获取属性或方法:可以根据字符串名称动态获取对象的属性或方法。
  2. 避免硬编码:使代码更加灵活和复用性更高。
  3. 处理缺失属性:通过提供默认值来优雅地处理缺失的属性或方法。
示例

假设有一个类 MiniApp,其中包含一个方法 current_page_method 和一个属性 page_title

class MiniApp:
    page_title = "Home Page"

    def current_page_method(self):
        print("Current page method called")

mini = MiniApp()
method_name = "current_page_method"
attr_name = "page_title"

# 获取并调用方法
getattr(mini, method_name)()  # 输出: Current page method called

# 获取属性
title = getattr(mini, attr_name)
print(title)  # 输出: Home Page

# 处理不存在的属性
missing_attr = getattr(mini, 'non_existent_attr', 'Default Value')
print(missing_attr)  # 输出: Default Value
结合代码片段

代码:

getattr(self.mini.native, 'hook_current_page_method')()

这行代码的作用是从 self.mini.native 对象中获取名为 hook_current_page_method 的方法,并立即调用它。如果该方法不存在且未提供默认值,会抛出 AttributeError

注意事项
  • 确保属性存在:如果不确定属性是否存在,可以提供默认值来避免异常。

    method = getattr(self.mini.native, 'hook_current_page_method', None)
    if callable(method):
        method()
    else:
        print("Method not found or not callable")
    
  • 检查返回值是否可调用:当获取的是方法时,确保返回值是可调用的(即是一个函数或方法对象)。

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

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

相关文章

2025-1-10-sklearn学习(36、37) 数据集转换-无监督降维+随机投影 沙上并禽池上暝。云破月来花弄影。

文章目录 sklearn学习(36、37) 数据集转换-无监督降维随机投影sklearn学习(36) 数据集转换-无监督降维36.1 PCA: 主成份分析36.2 随机投影36.3 特征聚集 sklearn学习(37) 数据集转换-随机投影37.1 Johnson-Lindenstrauss 辅助定理37.2 高斯随机投影37.3 稀疏随机矩阵 sklearn学…

openssl编译

关于windows下,openssl编译 环境准备 安装 perl:https://djvniu.jb51.net/200906/tools/ActivePerl5_64.rar安装nasm:https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win64/nasm-2.13.01-installer-x64.exe下载opensll源码:https://o…

2025-1-9 QT 使用 QXlsx库 读取 .xlsx 文件 —— 导入 QXlsx库以及读取 .xlsx 的源码 实践出真知,你我共勉

文章目录 1. 导入QXlsx库2. 使用 QXlsx库 读取 .xlsx 文件小结 网上有很多教程,但太费劲了,这里有个非常简便的好方法,分享给大家。 1. 导入QXlsx库 转载链接 :https://github.com/QtExcel/QXlsx/blob/master/HowToSetProject.md…

先辑芯片HPM5300系列之SEI多摩川协议命令表问题研究

多摩川协议有9条命令,但是先辑SEI的命令表只有8张。0-6是可用的,第7张是黑洞表,所以只有7张可用。 命令表的限制颇多,比如命令表只能按顺序使用 :例如0、1、3,那么命令表3是不能用的。 如果想要实现9个命令…

kotlin项目无法访问Java类的问题

使用IntelliJ创建一个Kotlin项目,然后在src/main/kotlin中创建一个java接口:Animal.java,然后在Main.kt中打印这个java接口,如下: fun main() {println(Animal::class.java) }代码在编辑器中并没有报错,但…

全栈面试(一)Basic/微服务

文章目录 项目地址一、Basic InterviewQuestions1. tell me about yourself?2. tell me about a time when you had to solve a complex code problem?3. tell me a situation that you persuade someone at work?4. tell me a about a confict with a teammate and how you…

医疗可视化大屏 UI 设计新风向

智能化交互 借助人工智能与机器学习技术,实现更智能的交互功能。如通过语音指令或手势控制来操作大屏,医护人员无需手动输入,可更便捷地获取和处理信息。同时,系统能根据用户的操作习惯和数据分析,自动推荐相关的医疗…

Angular由一个bug说起之十三:Cross Origin

跨域 想要了解跨域,首要要了解源 什么是源,源等于协议加域名加端口号 只有这三个都相同,才是同源,反之则是非同源。 比如下面这四个里,只有第4个是同源 而浏览器给服务器发送请求时,他们的源一样&#xff0…

【LeetCode Hot100 贪心算法】 买卖股票的最佳时机、跳跃游戏、划分字母区间

贪心算法 买卖股票的最佳时机买卖股票的最佳时机II跳跃游戏跳跃游戏II划分字母区间 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的…

MCANet: 基于多模态字幕感知的大语言模型训练无关视频异常检测

目录 摘要01 引言02 相关工作2.1 视频异常检测2.2 基于视频的大语言模型(VLLMs) 03 方法论3.1 问题定义3.2 MCANet3.3 图像字幕分支3.4 音频字幕分支3.5 基于LLM的异常评分3.6 视频-文本分数优化 04 实验4.1 数据集和评估指标4.2 实现细节4.3 定性结果4.…

为深度学习引入张量

为深度学习引入张量 什么是张量? 神经网络中的输入、输出和转换都是使用张量表示的,因此,神经网络编程大量使用张量。 张量是神经网络使用的主要数据结构。 张量的概念是其他更具体概念的数学概括。让我们看看一些张量的具体实例。 张量…

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件,支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境,可以在网页、小程序等平台中使用。 源码 https:…

[DO374] Ansible 配置文件

[DO374] Ansible 配置文件 1. 配置文件位置2. 配置文件3. Ansible 配置4. Ansible的Ad-hoc5. Ansible 模块6. playbook段落7. 任务执行后续8. Ansible 变量8.1 ansible 变量的定义8.1.1 主机变量8.1.2 主机组变量 8.2 vars的循环 9. Ansible Collection10. Ansible-galaxy 安装…

[程序设计]—代理模式

[程序设计]—代理模式👳 本文章记录学习于——52.面向切面:AOP-场景模拟_哔哩哔哩_bilibili 最近闲来无事,在学习Spring的源码: 后面慢慢更新源码系列blog,希望多多关注🙏🙏 目前已经总结的b…

OSPF - 2、3类LSA(Network-LSA、NetWork-Sunmmary-LSA)

前篇博客有对常用LSA的总结 2类LSA(Network-LSA) DR产生泛洪范围为本区域 作用:  描述MA网络拓扑信息和网络信息,拓扑信息主要描述当前MA网络中伪节点连接着哪几台路由。网络信息描述当前网络的 掩码和DR接口IP地址。 影响邻居建立中说到…

景芯SOC设计实战

终身辅导、一对一辅导,手把手教您完成SoC全流程设计,从入门到进阶,带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程!直播视频不定期升级!让您快速超越同龄人! 景芯团队主打文档服务器实战…

多云架构,JuiceFS 如何实现一致性与低延迟的数据分发

随着大模型的普及,GPU 算力成为稀缺资源,单一数据中心或云区域的 GPU 资源常常难以满足用户的全面需求。同时,跨地域团队的协作需求也推动了企业在不同云平台之间调度数据和计算任务。多云架构正逐渐成为一种趋势,然而该架构下的数…

如何获取文件的MIME类型

文章目录 1. 概念介绍2. 方法与类型2.1 使用方法2.2 常见类型3. 示例代码4. 内容总结我们在上一章回中介绍了"如何加载本地图片"相关的内容,本章回中将介绍如何获取文件类型.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中提到的文件类型是指MI…

【Uniapp-Vue3】computed计算属性用法及方法对比

如果我们想要将两个响应式变量进行某种运算,就可以使用computed计算属性。 比如下面这个例子中,输入名和姓合成全名,可以用直接显示的方法: 我们也可以使用computed属性: import {computed} from "vue"; le…

C#实现凸壳算法

凸壳计算代码: public static PointD[] calcConvexHull(PointD[] points) {// 按 x 坐标对点进行排序Array.Sort(points, (p1, p2) => p1.X.CompareTo(p2.X));// 创建下凸壳var lowerHull = new List<PointD>();foreach (var point in points){while (lowerHull.Co…