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代码真的很爽
Aug 26 Python
python字符类型的一些方法小结
May 16 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
Python数据类型中的“冒号“[::]——分片与步长操作示例
Jan 24 Python
Python中生成器和迭代器的区别详解
Feb 10 Python
python的常用模块之collections模块详解
Dec 06 Python
对Django项目中的ORM映射与模糊查询的使用详解
Jul 18 Python
python圣诞树编写实例详解
Feb 13 Python
python读取多层嵌套文件夹中的文件实例
Feb 27 Python
PyTorch 导数应用的使用教程
Aug 31 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
2020年10款优秀的Python第三方库,看看有你中意的吗?
Jan 12 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+ACCESS 文章管理程序代码
2010/06/21 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
使用PHP函数scandir排除特定目录
2014/06/12 PHP
PHP在线书签系统分享
2016/01/04 PHP
jquery 插件学习(四)
2012/08/06 Javascript
js加强的经典分页实例
2013/03/15 Javascript
node.js中watch机制详解
2014/11/17 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
Vue通过input筛选数据
2020/10/26 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
2017/09/07 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
Vue封装Swiper实现图片轮播效果
2018/02/06 Javascript
Vue+Openlayers自定义轨迹动画
2020/09/24 Javascript
[49:31]TFT vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python docx库用法示例分析
2019/02/16 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
python验证身份证信息实例代码
2019/05/06 Python
Python操作多维数组输出和矩阵运算示例
2019/11/28 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
Python模块/包/库安装的六种方法及区别
2020/02/24 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
python实现udp聊天窗口
2020/03/31 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
Servlet如何得到服务器的信息
2015/12/22 面试题
邮政员工辞职信
2014/01/16 职场文书
售房委托书
2014/08/30 职场文书
2014大学生批评与自我批评思想汇报
2014/09/21 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
买房协议书范本
2014/10/23 职场文书
2014年小学辅导员工作总结
2014/12/23 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
Python集合的基础操作
2021/11/01 Python