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导出数据到Excel可读取的CSV文件的方法
May 12 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
Python制作爬虫采集小说
Oct 25 Python
Python爬取qq music中的音乐url及批量下载
Mar 23 Python
用Python写一段用户登录的程序代码
Apr 22 Python
对python操作kafka写入json数据的简单demo分享
Dec 27 Python
python使用Matplotlib改变坐标轴的默认位置
Oct 18 Python
python程序输出无内容的解决方式
Apr 09 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
Apr 24 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
Django 如何实现文件上传下载
Apr 08 Python
python超详细实现完整学生成绩管理系统
Mar 17 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转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
php中OR与|| AND与&&的区别总结
2013/10/26 PHP
摘自织梦CMS的HTTP文件下载类
2015/08/08 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
PHP设计模式(六)桥连模式Bridge实例详解【结构型】
2020/05/02 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
jQuery实现的右下角广告窗体跟随效果示例
2016/09/16 Javascript
JavaScript实现类似淘宝的购物车效果
2017/03/16 Javascript
微信小程序用户授权,以及判断登录是否过期的方法
2019/05/10 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
使用Python将数组的元素导出到变量中(unpacking)
2016/10/27 Python
python实现发送邮件功能
2017/07/22 Python
在python3环境下的Django中使用MySQL数据库的实例
2017/08/29 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
详解Python如何生成词云的方法
2018/06/01 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
python中Lambda表达式详解
2019/11/20 Python
简单了解python filter、map、reduce的区别
2020/01/14 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
电大物流学生的自我评价
2013/10/25 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
求职意向书
2014/04/01 职场文书
住宅质量保证书
2014/04/29 职场文书
党员评议自我评价
2015/03/03 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
win10电脑关机快捷键是哪个 win10快速关机的几种方法
2022/08/14 数码科技