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提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
python pycurl验证basic和digest认证的方法
May 02 Python
Python3基于sax解析xml操作示例
May 22 Python
Python lambda表达式用法实例分析
Dec 25 Python
Python socket实现多对多全双工通信的方法
Feb 13 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
python的faker库用法
Nov 28 Python
Python timeit模块的使用实践
Jan 13 Python
Python通过两个dataframe用for循环求笛卡尔积
Apr 29 Python
python上下文管理的使用场景实例讲解
Mar 03 Python
教你怎么用PyCharm为同一服务器配置多个python解释器
May 31 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 file_get_contents 函数超时的几种解决方法
2009/07/30 PHP
深入php define()函数以及defined()函数的用法详解
2013/06/05 PHP
PHP常用数组函数介绍
2014/07/28 PHP
PHP中的替代语法介绍
2015/01/09 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
JavaScript中判断页面关闭、页面刷新的实现代码
2014/08/27 Javascript
检测一个函数是否是JavaScript原生函数的小技巧
2015/03/13 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
AngularJs ng-route路由详解及实例代码
2016/09/14 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
jquery做个日期选择适用于手机端示例
2017/01/10 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
详解从新建vue项目到引入组件Element的方法
2017/08/29 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
简单了解JavaScript中的执行上下文和堆栈
2019/06/24 Javascript
解析Python中while true的使用
2015/10/13 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
Python网页解析器使用实例详解
2020/05/30 Python
python list等分并从等分的子集中随机选取一个数
2020/11/16 Python
Internet体系结构
2014/12/21 面试题
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
汽车促销活动方案
2014/03/31 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
导游词之云南丽江-泸沽湖
2019/09/26 职场文书
导游词之麻姑仙境
2019/11/18 职场文书
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript