Python反射的用法实例分析


Posted in Python onFebruary 11, 2018

本文实例讲述了Python反射的用法。分享给大家供大家参考,具体如下:

在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射。接下记录下反射几个重要方法:

hasattr

判断对象中是否有这个方法或变量

class Person(object):
 def __init__(self,name):
  self.name = name
 def talk(self):
  print("%s正在交谈"%self.name)
p = Person("laowang")
print(hasattr(p,"talk")) # True。因为存在talk方法
print(hasattr(p,"name")) # True。因为存在name变量
print(hasattr(p,"abc"))  # False。因为不存在abc方法或变量

getattr

获取对象中的方法或变量的内存地址

class Person(object):
 def __init__(self,name):
  self.name = name
 def talk(self):
  print("%s正在交谈"%self.name)
p = Person("laowang")
n = getattr(p,"name") # 获取name变量的内存地址
print(n)    # 此时打印的是:laowang
f = getattr(p,"talk") # 获取talk方法的内存地址
f()      # 调用talk方法

我们发现getattr有三个参数,那么第三个参数是做什么用的呢?

s = getattr(p,"abc","not find")
print(s)    # 打印结果:not find。因为abc在对象p中找不到,本应该报错,属性找不到,但因为修改了找不到就输出not find

setattr

为对象添加变量或方法

def abc(self):
 print("%s正在交谈"%self.name)
class Person(object):
 def __init__(self,name):
  self.name = name
p = Person("laowang")
setattr(p,"talk",abc) # 将abc函数添加到对象中p中,并命名为talk
p.talk(p)    # 调用talk方法,因为这是额外添加的方法,需手动传入对象
setattr(p,"age",30)  # 添加一个变量age,复制为30
print(p.age)   # 打印结果:30

delattr

删除对象中的变量。注意:不能用于删除方法

class Person(object):
 def __init__(self,name):
  self.name = name
 def talk(self):
  print("%s正在交谈"%self.name)
p = Person("laowang")
delattr(p,"name")  # 删除name变量
print(p.name)   # 此时将报错

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python字符串的encode与decode研究心得乱码问题解决方法
Mar 23 Python
下载给定网页上图片的方法
Feb 18 Python
Python3写入文件常用方法实例分析
May 22 Python
Python六大开源框架对比
Oct 19 Python
玩转python爬虫之正则表达式
Feb 17 Python
Windows下安装python2和python3多版本教程
Mar 30 Python
python实现推箱子游戏
Mar 25 Python
python通过ffmgep从视频中抽帧的方法
Dec 05 Python
Python中一些深不见底的“坑”
Jun 12 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
python 实现矩阵按对角线打印
Nov 29 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 #Python
python编程嵌套函数实例代码
Feb 11 #Python
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 #Python
Django自定义manage命令实例代码
Feb 11 #Python
Python实现的购物车功能示例
Feb 11 #Python
python PyTorch参数初始化和Finetune
Feb 11 #Python
Python装饰器用法示例小结
Feb 11 #Python
You might like
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
ajax缓存问题解决途径
2006/12/06 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
2014/05/28 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
ubuntu下安装nodejs以及升级的办法
2015/05/08 NodeJs
JS控制表单提交的方法
2015/07/09 Javascript
jQuery表格插件datatables用法详解
2020/11/23 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
JavaScript中的this陷阱的最全收集并整理(没有之一)
2017/02/21 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
详解ES6中的三种异步解决方案
2018/06/28 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
vue 获取元素额外生成的data-v-xxx操作
2020/09/09 Javascript
Python操作Word批量生成文章的方法
2015/07/28 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Python识别快递条形码及Tesseract-OCR使用详解
2019/07/15 Python
pandas按行按列遍历Dataframe的几种方式
2019/10/23 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
如何用python 操作zookeeper
2020/12/28 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
雷曼兄弟的五金店:Lehman’s Hardware Store
2019/04/10 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
美国滑板店:Tactics
2020/11/08 全球购物
中医临床专业自我鉴定范文
2014/01/15 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
慈善晚会策划方案
2014/05/14 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
小学生成绩单评语
2014/12/31 职场文书
关于倡议书的范文
2015/04/29 职场文书