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自然语言编码转换模块codecs介绍
Apr 08 Python
详谈Pandas中iloc和loc以及ix的区别
Jun 08 Python
python pandas库中DataFrame对行和列的操作实例讲解
Jun 09 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
Python logging模块用法示例
Aug 28 Python
Python对象中__del__方法起作用的条件详解
Nov 01 Python
Python使用sorted对字典的key或value排序
Nov 15 Python
对Django中内置的User模型实例详解
Aug 16 Python
Python3批量移动指定文件到指定文件夹方法示例
Sep 02 Python
python实现俄罗斯方块小游戏
Apr 24 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
Dec 07 Python
python_tkinter事件类型详情
Mar 20 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入门基础之php代码写法
2011/12/30 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php实现三级级联下拉框
2016/04/17 PHP
xmlHTTP实例
2006/10/24 Javascript
jQuery.each()用法分享
2012/07/31 Javascript
基于jQuery的判断iPad、iPhone、Android是横屏还是竖屏的代码
2014/05/11 Javascript
多种方法实现360浏览器下禁止自动填写用户名密码
2014/06/16 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
jQuery的ajax中使用FormData实现页面无刷新上传功能
2017/01/16 Javascript
VUE开发一个图片轮播的组件示例代码
2017/03/06 Javascript
javascript帧动画(实例讲解)
2017/09/02 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue-cli项目无法用本机IP访问的解决方法
2018/09/20 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
微信小程序实现九宫格抽奖
2020/04/15 Javascript
微信小程序 button样式设置为图片的方法
2020/06/19 Javascript
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
利用matplotlib实现根据实时数据动态更新图形
2019/12/13 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
python使用nibabel和sitk读取保存nii.gz文件实例
2020/07/01 Python
解决Python中导入自己写的类,被划红线,但不影响执行的问题
2020/07/13 Python
Python读取yaml文件的详细教程
2020/07/21 Python
Python基础教程之输入输出和运算符
2020/07/26 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
出纳的岗位职责
2013/11/09 职场文书
高一家长会邀请函
2014/01/12 职场文书
商务考察邀请函范文
2014/01/21 职场文书
经典禁毒标语
2014/06/16 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
搞笑的婚礼主持词
2015/06/29 职场文书
毕业晚宴祝酒词
2015/08/11 职场文书
2019年年中工作总结讲话稿模板
2019/03/25 职场文书
护士年终工作总结不会写?各科护士模板总结
2020/01/02 职场文书