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 相关文章推荐
在树莓派2或树莓派B+上安装Python和OpenCV的教程
Mar 30 Python
Python StringIO模块实现在内存缓冲区中读写数据
Apr 08 Python
Mac中升级Python2.7到Python3.5步骤详解
Apr 27 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python_查看sqlite3表结构,查询语句的示例代码
Jul 17 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
使用python绘制温度变化雷达图
Oct 18 Python
Pandas —— resample()重采样和asfreq()频度转换方式
Feb 26 Python
解决django FileFIELD的编码问题
Mar 30 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
pytorch中index_select()的用法详解
Jan 06 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.ini 中文版
2006/10/28 PHP
分享10篇优秀的jQuery幻灯片制作教程及应用案例
2011/04/16 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
Javascript 引擎工作机制详解
2016/11/30 Javascript
jQuery 插件实现随机自由弹跳气泡样式
2017/01/12 Javascript
layui表格实现代码
2017/05/20 Javascript
jQuery常见的遍历DOM操作详解
2018/09/05 jQuery
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
解决Django migrate No changes detected 不能创建表的问题
2018/05/27 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
深入理解Django-Signals信号量
2019/02/19 Python
python pygame实现方向键控制小球
2019/05/17 Python
Python编程快速上手——正则表达式查找功能案例分析
2020/02/28 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
Python pytesseract验证码识别库用法解析
2020/06/29 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
详解Django中异步任务之django-celery
2020/11/05 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
奥地利度假券的专家:we-are.travel
2019/04/10 全球购物
人力资源行政经理自我评价
2013/10/23 职场文书
服务型党组织建设典型材料
2014/05/07 职场文书
父亲节感言
2015/08/03 职场文书
给校长的建议书作文300字
2015/09/14 职场文书
Java实现房屋出租系统详解
2021/10/05 Java/Android
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
微信小程序调用python模型
2022/04/21 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
2022/06/21 Python