转自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中的反射机制的更多相关文章

  1. Python Python中的反射机制

    Python中的反射机制 by:授客 QQ:1033553122 概念 借用java中的定义:在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方 ...

  2. python中的反射

    在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些 ...

  3. Python 中的反射和自省

    本文主要介绍Python中的反射和自省,以及该机制的简单应用 熟悉Java的程序员,一定经常和Class.forName打交道.即使不是经常亲自调用这个方法,但是在很多框架中(spring,eclip ...

  4. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  5. Python 异常处理与反射机制

    Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Py ...

  6. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  7. 浅说Java中的反射机制(二)

    写过一篇Java中的反射机制,不算是写,应该是抄了,因为那是别人写的,这一篇也是别人写的,摘抄如下: 引自于Java基础--反射机制的知识点梳理,作者醉眼识朦胧.(()为我手记) 什么是反射? 正常编 ...

  8. 浅说Java中的反射机制(一)

    在学习传智播客李勇老师的JDBC系列时,会出现反射的概念,由于又是第一次见,不免感到陌生.所以再次在博客园找到一篇文章,先记录如下: 引用自java中的反射机制,作者bingoideas.(()为我手 ...

  9. .Net 中的反射机制

    .Net 中的反射机制 概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标 ...

  10. oc中的反射机制

    好久没有总结过了,一直在赶项目... 今天来总结一下OC中的反射机制,有什么不对的地方,还请多多海涵. 反射机制,简单的说就是在程序运行期间通过类的名字来动态的获取类的信息,从而实现动态的创建类,以及 ...

随机推荐

  1. map函数中调用多个async await请求出现的promise问题解决

    以上这个打印会返回[promise,promise,promise]那么是什么原因造成的呢?我们先来一个方法解决: 但是以上这种解决方式并没有真正解决问题,还是会返回一个[promise,promis ...

  2. laravel 导入导出(实际上还是php代码实现)

    1.导出 public function excel(){        $data=User::all();        $data=json_decode(json_encode($data), ...

  3. 处理code中代码格式化与eslint冲突

    在结尾去掉分号 让字符串格式化之后用单引号表示 去掉格式化后自动给末尾加的逗号 在根目录下新建一个文件prettierrc 输入如下 函数名与()之间取消空格 打开eslintrc.js 输入如下代码 ...

  4. Windows MFC HTTP GET请求 函数流程

    Windows MFC HTTP GET请求 函数流程 1 CString m_strHttpUrl(_T("http://10.200.80.86:8090/course/upload&q ...

  5. react native 使用什么本地存储(asyncStorage 或者 H5的LocalStorage)

    1. 官方文档上面 已经废弃 ,官方建议@react-native-community/async-storage代替.我看了这个确实写起来很麻烦,果断不使用了 2. 之后我使用 react-nati ...

  6. 【PDF】数理科学 2001年01月号 特集:「時間とは何か」- 時間が生んだ世界観とパラダイム -

    书本详情 标题:数理科学 2001年01月号 特集:「時間とは何か」- 時間が生んだ世界観とパラダイム - | 数理科学編集部 | 年份:2001出版社:サイエンス社ISBN10:暂无信息5ISBN1 ...

  7. jquery 判断字符串长度

    function titleLength(str) { var strLength = 0; var list = str.split(""); for (var i = 0; i ...

  8. 随机生成四则运算表达式【Unity】

    根据自己项目需求调整代码中表达式的公共方法 using System.Collections; using System.Collections.Generic; using System; usin ...

  9. oculus按键大全

    // OVRInput.Update(); if (OVRInput.GetUp(OVRInput.Button.Three)) { Debug.Log("remote click" ...

  10. C#——》创建Windows服务,发布并调试Windows服务

    一,创建一个windows服务项目.  二,双击Service1.cs进入设计界面,在空白处右键单击选择添加安装程序,如下图所示. 三,添加安装程序后,会进入如下图界面,生成两个组件:serviceP ...