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脚本对Linux服务器进行监控的教程
Apr 02 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
python实现用户答题功能
Jan 17 Python
使用python获取电脑的磁盘信息方法
Nov 01 Python
Python-接口开发入门解析
Aug 01 Python
python命名空间(namespace)简单介绍
Aug 10 Python
python批量处理文件或文件夹
Jul 28 Python
python实现复制文件到指定目录
Oct 16 Python
python 使用shutil复制图片的例子
Dec 13 Python
django3.02模板中的超链接配置实例代码
Feb 04 Python
最小二乘法及其python实现详解
Feb 24 Python
pycharm 关闭search everywhere的解决操作
Jan 15 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 加密与解密的斗争
2009/04/17 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
jQuery TextBox自动完成条
2009/07/22 Javascript
用Jquery实现可编辑表格并用AJAX提交到服务器修改数据
2009/12/27 Javascript
js操作checkbox遇到的问题解决
2013/06/29 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
10个最优秀的Node.js MVC框架
2017/08/24 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
2018/01/15 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Django中使用group_by的方法
2015/05/26 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
一份python入门应该看的学习资料
2018/04/11 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
佳能法国商店:Canon法国
2019/02/14 全球购物
Java的五个基础面试题
2016/02/26 面试题
《少年王冕》教学反思
2014/04/11 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
新闻报道策划方案
2014/06/11 职场文书
故宫英文导游词
2015/01/31 职场文书
人事主管岗位职责
2015/02/04 职场文书
我是特种兵观后感
2015/06/11 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
java实现自定义时钟并实现走时功能
2022/06/21 Java/Android