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实现360皮肤按钮控件示例
Feb 21 Python
Python+request+unittest实现接口测试框架集成实例
Mar 16 Python
Python RabbitMQ消息队列实现rpc
May 30 Python
python和mysql交互操作实例详解【基于pymysql库】
Jun 04 Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
pytorch下使用LSTM神经网络写诗实例
Jan 14 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
Laravel Reponse响应客户端示例详解
2020/09/03 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
jQuery 1.4 15个你应该知道的新特性(译)
2010/01/24 Javascript
JS控制阿拉伯数字转为中文大写示例代码
2013/09/04 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
JavaScript学习总结之JS、AJAX应用
2016/01/29 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
封装的dialog插件 基于bootstrap模态对话框的简单扩展
2016/08/10 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
uniapp,微信小程序中使用 MQTT的问题
2020/07/11 Javascript
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
2017/07/27 Python
python实现石头剪刀布程序
2021/01/20 Python
彻底理解Python中的yield关键字
2019/04/01 Python
keras之权重初始化方式
2020/05/21 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
公司开业庆典策划方案
2014/06/04 职场文书
计划生育标语
2014/06/23 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
教师节感想
2015/08/11 职场文书
丧事答谢词大全
2015/09/30 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫