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 translator使用实例
Sep 06 Python
Python中的迭代器漫谈
Feb 03 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
Python编程把二叉树打印成多行代码
Jan 04 Python
Python延时操作实现方法示例
Aug 14 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
Python 实现还原已撤回的微信消息
Jun 18 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
使用apiDoc实现python接口文档编写
Nov 19 Python
tensorflow自定义激活函数实例
Feb 04 Python
Python实现AI自动抠图实例解析
Mar 05 Python
Python 装饰器(decorator)常用的创建方式及解析
Apr 24 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
php模块memcache和memcached区别分析
2011/06/14 PHP
PHP根据key删除数组中指定的元素
2019/02/28 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
js模拟实现Array的sort方法
2007/12/11 Javascript
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
JSON数据中存在单个转义字符“\”的处理方法
2018/07/11 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
eslint 的三大通用规则详解
2019/05/16 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
js实现简易计算器小功能
2020/11/18 Javascript
vue监听滚动事件的方法
2020/12/21 Vue.js
原生JavaScript实现留言板
2021/01/10 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
利用Fn.py库在Python中进行函数式编程
2015/04/22 Python
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
python插入排序算法实例分析
2015/07/03 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
PyQt5 多窗口连接实例
2019/06/19 Python
Python线上环境使用日志的及配置文件
2019/07/28 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
详解python中的异常捕获
2020/12/15 Python
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
一道输出判断型Java面试题
2014/10/01 面试题
党校学习心得体会范文
2014/09/09 职场文书
公司法定代表人授权委托书
2014/09/29 职场文书
2014年移动公司工作总结
2014/12/08 职场文书
捐资助学感谢信
2015/01/21 职场文书
汽车销售员岗位职责
2015/04/11 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript