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实现的ini文件操作类分享
Nov 20 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
使用python加密自己的密码
Aug 04 Python
Python在线运行代码助手
Jul 15 Python
浅谈python for循环的巧妙运用(迭代、列表生成式)
Sep 26 Python
Python安装模块的常见问题及解决方法
Feb 05 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
Python中pymysql 模块的使用详解
Aug 12 Python
Python decorator拦截器代码实例解析
Apr 04 Python
Python实现封装打包自己写的代码,被python import
Jul 12 Python
python 检测nginx服务邮件报警的脚本
Dec 31 Python
Python使用Kubernetes API访问集群
May 30 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下使用无限生命期Session的方法
2007/03/16 PHP
php a simple smtp class
2007/11/26 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
2016/09/11 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
点击隐藏页面左栏或右栏实现js代码
2013/04/01 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
JS实现的一个简单的Autocomplete自动完成例子
2014/04/16 Javascript
jquery使用正则表达式验证email地址的方法
2015/01/22 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
jquery简单实现带渐显效果的选项卡菜单代码
2015/09/01 Javascript
为何JS操作的href都是javascript:void(0);呢
2015/11/12 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
浅谈JS继承_借用构造函数 & 组合式继承
2016/08/16 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
Python面向对象基础入门之编码细节与注意事项
2018/12/11 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
2019/10/30 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python Celery异步任务队列使用方法解析
2020/08/10 Python
使用简单的CSS3属性实现炫酷读者墙效果
2014/01/08 HTML / CSS
美国最大的香水连锁店官网:Perfumania
2016/08/15 全球购物
法国大使拉杆箱官网:DELSEY Paris
2018/03/20 全球购物
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
大学生收银员求职信分享
2014/01/02 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
通讯稿格式及范文
2015/07/22 职场文书
个人业务学习心得体会
2016/01/25 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书