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的动态重新封装的教程
Apr 11 Python
浅谈Python数据类型判断及列表脚本操作
Nov 04 Python
Python学习之Django的管理界面代码示例
Feb 10 Python
Python中多个数组行合并及列合并的方法总结
Apr 12 Python
Python 字符串转换为整形和浮点类型的方法
Jul 17 Python
Django实现单用户登录的方法示例
Mar 28 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
Python实现AI自动抠图实例解析
Mar 05 Python
python安装读取grib库总结(推荐)
Jun 24 Python
python与c语言的语法有哪些不一样的
Sep 13 Python
python tqdm实现进度条的示例代码
Nov 10 Python
Django filter动态过滤与排序实现过程解析
Nov 26 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扩展的三种安装方法
2009/04/26 PHP
使用PHP获取网络文件的实现代码
2010/01/01 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
Bootstrap基本插件学习笔记之Alert警告框(20)
2016/12/08 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
如何检测JavaScript中的死循环示例详解
2020/08/30 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
Python with的用法
2014/08/22 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python中使用logging模块打印log日志详解
2015/04/05 Python
python常用知识梳理(必看篇)
2017/03/23 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
Python实现点阵字体读取与转换的方法
2019/01/29 Python
python matplotlib库绘制散点图例题解析
2019/08/10 Python
Python如何使用BeautifulSoup爬取网页信息
2019/11/26 Python
Python进程Multiprocessing模块原理解析
2020/02/28 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Python 解析xml文件的示例
2020/09/29 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
CSS3中设置3D变形的transform-style属性详解
2016/05/23 HTML / CSS
HTML5 Canvas阴影使用方法实例演示
2013/08/02 HTML / CSS
美国著名的家居用品购物网站:Bed Bath & Beyond
2018/01/05 全球购物
用Python写一个for循环的例子
2016/07/19 面试题
毕业生求职简历中的自我评价
2013/10/18 职场文书
会议活动邀请函
2014/01/27 职场文书
大学毕业自我评价
2014/02/02 职场文书
节能宣传周活动总结
2014/05/08 职场文书
教师个人事迹材料
2014/12/17 职场文书
毕业典礼邀请函
2015/01/31 职场文书
医院保洁员岗位职责
2015/02/13 职场文书
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS