python中的反射机制
转自https://www.cnblogs.com/renjie1105/p/15909285.html
python反射简介
在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射。
hasattr
判断对象中是否有这个方法或变量
class Person:
def __init__(self, name):
self.name = name
def talk(self):
print(f'{self.name}正在交谈')
p = Person('alice')
print(hasattr(p, 'talk'))
print(hasattr(p, 'name'))
print(hasattr(p, 'abc'))
输出:
True
True
False
getattr
获取对象中的方法或变量的内存地址
class Person:
def __init__(self, name):
self.name = name
def talk(self):
print(f'{self.name}正在交谈')
p = Person('alice')
n = getattr(p, 'name') # 获取name变量的内存地址
print(n)
f = getattr(p, 'talk') # 获取talk方法的内存地址
f()
s = getattr(p, 'abc', 'not find') # 打印结果:not find。
# 因为abc在对象p中找不到,本应该报错,
# 属性找不到,但因为修改了找不到就输出not find
print(s)
setattr
为对象添加变量或方法
def abc(self):
print(f'{self.name}正在交谈')
class Person:
def __init__(self, name):
self.name = name
p = Person('alice')
setattr(p, 'talk', abc) # 将abc函数添加到对象p中,并命名为talk
p.talk(p) # 调用talk方法,因为这是额外添加的方法,需手动传入对象
setattr(p, 'age', 30) # 添加一个变量age,初始值为30
print(p.age)
delattr
删除对象中的变量,但是不能删除方法
python中的反射机制的更多相关文章
- Python Python中的反射机制
Python中的反射机制 by:授客 QQ:1033553122 概念 借用java中的定义:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方 ...
- python中的反射
在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些 ...
- Python 中的反射和自省
本文主要介绍Python中的反射和自省,以及该机制的简单应用 熟悉Java的程序员,一定经常和Class.forName打交道.即使不是经常亲自调用这个方法,但是在很多框架中(spring,eclip ...
- java 中利用反射机制获取和设置实体类的属性值
摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...
- Python 异常处理与反射机制
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- 浅说Java中的反射机制(二)
写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...
- 浅说Java中的反射机制(一)
在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...
- .Net 中的反射机制
.Net 中的反射机制 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标 ...
- oc中的反射机制
好久没有总结过了,一直在赶项目... 今天来总结一下OC中的反射机制,有什么不对的地方,还请多多海涵. 反射机制,简单的说就是在程序运行期间通过类的名字来动态的获取类的信息,从而实现动态的创建类,以及 ...
随机推荐
- MySQL 常用命令(2)------数据库操作
四.数据库操作 1.创建数据库 注意:创建数据库前要先连接mysql数据库 语法:create database <数据库名> 例:创建数据库并分配用户 1.create database ...
- Unity Random
Random 不仅可以随机值,还可以随机其它属性,用了这么久,刚知道... 譬如: rotation 随机Rotation onUnitSphere 球体表面随机点 insideUnitCircl ...
- freertos 启动任务调度器后卡在svc 0,汇编停在了0x0800014A E7FE B 0x0800014A
分别引导加载程序和应用程序(带有或不带有FreeRTOS)都可以正常工作. 引导加载程序和应用程序(无需FreeRTOS)可以完美运行. 但是,如果我在应用程序中使用freeRTOS并完成两项任务(显 ...
- js-禁止鼠标右键/禁止选中文字
1 <p>使用contextmenu禁止鼠标右键</p> 2 <script> 3 document.addEventListener('contextmenu', ...
- t:datagrid 行编辑 类型备份
如编辑文本类型: <t:dgCol extendParams="editor:'text'" /> 如编辑数值类型: <t:dgCol extendParams= ...
- python中,元组,列表,字典,字符串的相互转换
#author:RXS002 #1.字典 dict = {'name':'Zara','age':7,'class':'First'} #字典转换为字符串,返回:<type 'str'> ...
- 打开part文件夹
1 #include <uf.h> 2 #include <uf_ui.h> 3 #include <uf_part.h> 4 #include <atlst ...
- mac常用命令和Git创建tag命令
一.mac命令 p.p1 { margin: 0; font: 12px ".PingFang SC" } p.p2 { margin: 0; font: 12px "H ...
- java 项目中Error linstenerStart 报错解决方法
项目中经常会遇到如下报错: 严重:Error linstenerStart 这种报错,我们看不出来到底是出现了什么问题.下面我们就一步一步来解决: (1)首先进入项目的classes目录下: (2)进 ...
- Java的访问控制修饰符有哪些?各有什么访问权限?请对照第7页ppt的表格分别写程序验证。
Java的访问控制修饰符有哪些? JAVA主要有两类修饰符: 访问控制修饰符 : default, public , protected, private 非访问控制修饰符 : final, abst ...