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运用于数据分析的简单教程
Mar 27 Python
Python只用40行代码编写的计算器实例
May 10 Python
python实现批量按比例缩放图片效果
Mar 30 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
对python数据切割归并算法的实例讲解
Dec 12 Python
python判断一个数是否能被另一个整数整除的实例
Dec 12 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
使用Python实现将list中的每一项的首字母大写
Jun 11 Python
python模块常用用法实例详解
Oct 17 Python
Python编程快速上手——Excel表格创建乘法表案例分析
Feb 28 Python
python3.8动态人脸识别的实现示例
Sep 21 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
解析PayPal支付接口的PHP开发方式
2010/11/28 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
php中socket通信机制实例详解
2015/01/03 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
一些javascript一些题目的解析
2010/12/25 Javascript
JQuery与JS里submit()的区别示例介绍
2014/02/17 Javascript
Node.js编程中客户端Session的使用详解
2015/06/23 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
django自带的server 让外网主机访问方法
2018/05/14 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
virtualenv 指定 python 解释器的版本方法
2018/10/25 Python
Python正则表达式和元字符详解
2018/11/29 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python中线程和进程有何区别
2020/06/17 Python
Python必须了解的35个关键词
2020/07/16 Python
python collections模块的使用
2020/10/16 Python
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
小学生考试获奖感言
2014/01/30 职场文书
2014年五一促销活动方案
2014/03/09 职场文书
企业法人授权委托书
2014/04/03 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
学校志愿者活动总结
2014/06/27 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
员工手册编写范本
2015/05/14 职场文书