python的自省机制(改bug有用)

在 Python 中,自省(Introspection)机制是指程序在运行时能够获取自身的信息,例如对象的类型、属性、方法等。

Python 提供了一些内置函数和特殊属性来支持自省。以下是一些常见的例子:

  1. type() 函数:返回对象的类型。
       num = 5print(type(num))  

  2. dir() 函数:返回对象的所有属性和方法的列表。
       class MyClass:def method1(self):passdef method2(self):passobj = MyClass()print(dir(obj))  

    会得到属性的所有名称,但不会有值。

  3. hasattr() 、getattr() 和 setattr() 函数:用于检查对象是否具有某个属性、获取属性的值以及设置属性的值。
       class MyClass:def __init__(self):self.name = "Alice"obj = MyClass()# 检查是否具有某个属性print(hasattr(obj, 'name'))  # 获取属性的值print(getattr(obj, 'name'))  # 设置属性的值setattr(obj, 'name', 'Bob')print(obj.name)  

  4. isinstance() 函数:用于检查一个对象是否是某个类或其派生类的实例。
       class Parent:passclass Child(Parent):passobj = Child()print(isinstance(obj, Child))  print(isinstance(obj, Parent))  

    自省机制使得 Python 程序具有很高的灵活性和动态性,可以在运行时根据对象的信息进行动态的决策和操作。

  5. class Person:name = "user"class Student(Person):def __init__(self, school_name):self.school_name = school_nameif __name__ == "__main__":user = Student("慕课网")print(user.__dict__)  print(user.name)  

    在上述代码中,定义了两个类 Person 和 Student 。Person 类有一个类属性 name ,其值为 "user" 。Student 类继承自 Person 类,并在其 __init__ 方法中初始化了一个实例属性 school_name 。

    在这段代码中,if __name__ == "__main__": 是一个常见的条件判断,用于确保以下的代码仅在当前脚本作为主程序运行时执行。

     

    然后创建了 Student 类的一个实例 user ,并通过 user.__dict__ 打印出了 user 实例的属性字典。这个字典包含了实例自身定义的属性及其对应的值,不包括从父类继承的属性。

    对于上述代码,print(user.__dict__) 会输出 {'school_name': '慕课网'} ,因为在创建 Student 类的实例 user 时,传递的参数 "慕课网" 被赋值给了实例属性 school_name 。

     

    而 print(user.name) 会输出 "user" ,因为 name 是 Person 类的类属性,并且可以被 Student 类的实例访问到。

    总的来说,这段代码主要演示了类的继承、实例的创建以及通过 __dict__ 来查看实例的属性信息。

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

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

相关文章

Prometheus 云原生 - 监控 Linux、MySQL、Redis、RabbitMQ、Docker、SpringBoot 3.x

目录 开始 Exporter 采集数据,Prometheus 拉取并监控 Linux MySQL Redis RabbitMQ Docker SpringBoot 3.x 开始 Exporter 采集数据,Prometheus 拉取并监控 Note:Prometheus 和 Grafana 的部署已经在前面的章节中讲过了,不…

Solana Blink和SEND的崛起:技术与市场效应的结合

随着Solana生态系统的不断发展,新的项目和技术不断涌现,吸引了大量的关注和投资。最近,Solana的Blink项目及其相关的SEND代币成为了市场的焦点,引发了广泛的讨论和投资热潮。本文将探讨Blink和SEND的技术创新、市场表现以及未来的…

C++中的自定义数据类型:类和结构体

目录 自定义数据类型(1)类A.面向对象的四大特征B.What(什么是类)C.Why(类的作用)D.How(如何定义和使用类) (2)结构体 自定义数据类型 (1)类 A.面向对象的四大特征 谈到类,就必须讲一下面向对…

基于MATHCAD的傅里叶级数模拟和方波图像绘制

一、MATHCAD软件简介 MATHCAD是一款功能强大的数学计算软件,它允许用户以类似手写公式的方式输入数学表达式,并即时显示计算结果和图形。在工程研究和学术写作的世界里,MathCAD以其强大的符号运算能力和直观的数学书写体验脱颖而出。MATHCAD…

三相PWM整流器PI双闭环控制Simulink

1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Rb)软件。建议采用matlab2017 Rb及以上版本打开。(若需要其他版本可联系代为转换) 2.拓扑结构: 3.模型算法架构: 4.仿真算法: &am…

Lua协程(同步的多线程)

1.coroutine.create( func ) 创建一个协程,返回co(coroutine),参数是一个函数,当调用resume时就唤醒co并调用函数 2.coroutine.resume(co, 函数参数们) 启动协程co并传入协程调用函数的参数,可以带回协程…

前端XMLHttpRequest、Fetch API、Axios实现文件上传、下载方法及后端Spring文件服务器处理方法

前言 本文总结Web应用开发中文件上传、下载的方法,即从前端表单输入文件并封装表单数据,然后请求后端服务器的处理过程;从基础的JavaScript中XmlHttpRequest对象、Fetch API实现上传、下载进行说明,并给出了前端常用的axios库的请…

[AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性

目录 背景描述 用浏览器访问,正常返回 ​编辑 AHK v2官方示例源代码 AHK v2运行结果报错(0x80092004) 找不到对象或属性 用thqby大佬的WinHttpRequest.ahk库测试报错 0x80092004 找不到对象或属性 附: 用Apifox访问,也正常返回 AHK v1 …

克洛托光电再度合作福晶科技,高精度光学镜头装调仪正式交付

近日,苏州东方克洛托光电技术有限公司(下称“克洛托光电”)高精度光学镜头装调仪正式交付于福建福晶科技股份有限公司,研发人员在现场完成设备安装调试并介绍使用方法。据悉,这已是双方第二次展开合作。 前沿产品力助推…

django之 annotate,aggrate

annotate:annotate() 不是一个终止子句。 annotate() 子句的输出是一个 QuerySet;这个 QuerySet 可以使用任何其他 QuerySet 操作进行修改,包括 filter()、order_by(),甚至对 annotate() 的额外调用。"增加一列属性" ag…

k8s中kubesphere开启devops总是报错解决

自己搭建过k8s集群遇到各种形式的报错,手动去解决,其实这都是由程序自动去解决的问题,由于自己的的失误导致问题不得不去亲自解决是虽然管用但费时费力,在kubersphere开启devops本身没什么问题,但由于虚拟机配置低导致…

SpringBoot+Vue实现简单的文件上传(策略模式)

SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1,Vue 2,ElementUI 2 问题 前两篇文章,我们上传了txt、Excel文件,其实文件类型有很多种,如果我们的upload组件没有上传文件类型的限制,那么同一个…

MongoDB Shard 集群 Docker 部署

MongoDB Shard Docker 部署 部署环境 主机地址主机配置主机系统Mongodb1/192.168.31.1352CPU 4GBDebian12Mongodb2/192.168.31.1092CPU 4GBDebian12Mongodb3/192.168.31.1652CPU 4GBDebian12 镜像版本 mongodb/mongodb-community-server:5.0.27-ubuntu2004 部署集群 部署…

【tomcat】Tomcat如何扩展Java线程池原理

池化技术 在后端中,对于经常使用池化就是来提升系统性能,比如数据库连接池、线程池连接池等,本质都是利用空间换时间的来提升性能,用来避免资源的频繁创建和销毁,以此提高资源的复用率,所以合理设置系统所…

大语言模型诞生过程剖析

过程图如下 📚 第一步:海量文本的无监督学习 得到基座大模型🎉 🔍 原料:首先,我们需要海量的文本数据,这些数据可以来自互联网上的各种语料库,包括书籍、新闻、科学论文、社交媒体帖…

Object.assign方法有什么用?超详细测试用例、实例、可以在浏览器的控制台打印结果

Object.assign 是一个 JavaScript 方法,用于将一个或多个源对象的所有可枚举属性复制到目标对象中。它返回目标对象。这个方法常用于合并对象或浅复制对象。 语法 Object.assign(target, ...sources)target: 目标对象。sources: 一个或多个源对象。 示例 1. 合并…

【2024最新】C++扫描线算法介绍+实战例题

扫描线介绍:OI-Wiki 【简单】一维扫描线(差分优化) 网上一维扫描线很少有人讲,可能认为它太简单了吧,也可能认为这应该算在差分里(事实上讲差分的文章里也几乎没有扫描线的影子)。但我认为&am…

简单搭建卷积神经网络实现手写数字10分类

搭建卷积神经网络实现手写数字10分类 1.思路流程 1.导入minest数据集 2.对数据进行预处理 3.构建卷积神经网络模型 4.训练模型,评估模型 5.用模型进行训练预测 一.导入minest数据集 MNIST--->raw--->test-->(0,1,2...) 10个文件夹 MNIST--->raw-…

VRRP虚拟路由冗余技术

VRRP虚拟路由冗余技术:是一种路由容错协议,用于在网络中提供路由器的冗余备份。它通过将多个路由器虚拟成一个虚拟路由器并且多个路由器之间共享一个虚拟IP地址来实现冗余和高可用性。当承担转发业务的主路由器出现故障时,其他备份路由器可以…

git的下载流程,及使用方法,官网地址怎么找?

要下载git以及了解使用方法,可以按照以下步骤进行操作: 打开浏览器,输入git的官方网站地址:https://git-scm.com/(官网地址可能会有变动,请根据最新情况进行搜索)。 在官网上找到下载按钮或链接…