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中给List添加元素的4种方法分享
Nov 28 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
cmd运行python文件时对结果进行保存的方法
May 16 Python
python中时间模块的基本使用教程
May 14 Python
Pyqt QImage 与 np array 转换方法
Jun 27 Python
Python3使用xml.dom.minidom和xml.etree模块儿解析xml文件封装函数的方法
Sep 23 Python
Python基于smtplib协议实现发送邮件
Jun 03 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
python基于pygame实现飞机大作战小游戏
Nov 19 Python
PyMongo 查询数据的实现
Jun 28 Python
python函数的两种嵌套方法使用
Apr 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
php编写的简单页面跳转功能实现代码
2013/11/27 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
PHP面试题之文件目录操作
2015/10/15 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
Jquery插件写法笔记整理
2012/09/06 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
Js删除数组中某一项或几项的几种方法(推荐)
2016/07/27 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
github配置使用指南
2014/11/18 Python
Sanic框架路由用法实例分析
2018/07/16 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
详解python中的index函数用法
2019/08/06 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
贯彻落实“八项规定”思想汇报
2014/09/13 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
2015年普法依法治理工作总结
2015/05/26 职场文书
2016年5月份红领巾广播稿
2015/12/21 职场文书
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏