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 相关文章推荐
详细介绍Ruby中的正则表达式
Apr 10 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
python:socket传输大文件示例
Jan 18 Python
python的socket编程入门
Jan 29 Python
python实现跨excel的工作表sheet之间的复制方法
May 03 Python
基于Django框架利用Ajax实现点赞功能实例代码
Aug 19 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统
Sep 05 Python
Python CSV文件模块的使用案例分析
Dec 21 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
keras输出预测值和真实值方式
Jun 27 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 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 xml实例 留言本
2009/03/20 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php制作动态随机验证码
2015/02/12 PHP
PHP获取用户访问IP地址的5种方法
2016/05/16 PHP
用tip解决Ext列宽度不够的问题
2008/12/13 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
JavaScript随机排序(随即出牌)
2010/09/17 Javascript
理解Javascript_13_执行模型详解
2010/10/20 Javascript
GRID拖拽行的实例代码
2013/07/18 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
深究AngularJS之ui-router详解
2017/06/13 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
详解Require.js与Sea.js的区别
2018/08/05 Javascript
微信小程序picker组件关于objectArray数据类型的绑定方法
2019/03/13 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
Python的print用法示例
2014/02/11 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
python实现弹跳小球
2019/05/13 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
浅谈Django2.0 加xadmin踩的坑
2019/11/15 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
艺术专业大学生自我评价
2013/09/22 职场文书
护理专业优质毕业生自荐书
2014/01/31 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
公司聘任书模板
2014/03/29 职场文书
鼓舞士气的口号
2014/06/16 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
openstack中的rpc远程调用的方法
2021/07/09 Python