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 相关文章推荐
详解python3中zipfile模块用法
Jun 18 Python
python 读取竖线分隔符的文本方法
Dec 20 Python
django数据库自动重连的方法实例
Jul 21 Python
Python检查 云备份进程是否正常运行代码实例
Aug 22 Python
关于Python形参打包与解包小技巧分享
Aug 24 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
Django表单提交后实现获取相同name的不同value值
May 14 Python
python实现学生成绩测评系统
Jun 22 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
selenium+headless chrome爬虫的实现示例
Jan 08 Python
Python 正则模块详情
Nov 02 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异常处理方法实例汇总
2015/06/24 PHP
php无限级分类实现方法分析
2016/10/19 PHP
浏览器缩放检测的js代码
2014/09/28 Javascript
JavaScript学习笔记之内置对象
2015/01/22 Javascript
Node.js 异步编程之 Callback介绍(一)
2015/03/30 Javascript
JQuery实现样式设置、追加、移除与切换的方法
2015/06/11 Javascript
理解javascript中Map代替循环
2016/02/26 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解
2019/01/19 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
[01:08:24]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第一场 2月5日
2021/03/11 DOTA
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
遍历python字典几种方法总结(推荐)
2016/09/11 Python
python3.4下django集成使用xadmin后台的方法
2017/08/15 Python
python调用百度语音REST API
2018/08/30 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
浅谈Python 递归算法指归
2019/08/22 Python
Python sorted对list和dict排序
2020/06/09 Python
python使用dlib进行人脸检测和关键点的示例
2020/12/05 Python
CSS3实现10种Loading效果
2016/07/11 HTML / CSS
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
2014年英语工作总结
2014/12/20 职场文书
小学端午节活动总结
2015/02/11 职场文书
2015年119消防宣传日活动总结
2015/03/24 职场文书
大学生入党自传2015
2015/06/26 职场文书
小学数学教学随笔
2015/08/14 职场文书
小学班级标语口号大全
2015/12/26 职场文书
高一作文之乐趣
2019/11/21 职场文书
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL