Python反射的用法实例分析

 更新时间:2018年02月11日 11:14:33   作者:喷跑的豆子   我要评论
这篇文章主要介绍了Python反射的用法,结合实例形式分析了Python反射机制所涉及的几个常用方法与相关使用技巧,需要的朋友可以参考下

本文实例讲述了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加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • python识别图像并提取文字的实现方法

    python识别图像并提取文字的实现方法

    这篇文章主要介绍了python识别图像并提取文字的实现方法,
    2019-06-06
  • python样条插值的实现代码

    python样条插值的实现代码

    这篇文章主要为大家详细介绍了python样条插值的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Python中获取对象信息的方法

    Python中获取对象信息的方法

    这篇文章主要介绍了Python中获取对象信息的方法,是Python学习当中的基础知识,需要的朋友可以参考下
    2015-04-04
  • Python中最好用的命令行参数解析工具(argparse)

    Python中最好用的命令行参数解析工具(argparse)

    这篇文章主要介绍了Python中最好用的命令行参数解析工具(argparse),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • Tensorflow分类器项目自定义数据读入的实现

    Tensorflow分类器项目自定义数据读入的实现

    这篇文章主要介绍了Tensorflow分类器项目自定义数据读入的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • python threading和multiprocessing模块基本用法实例分析

    python threading和multiprocessing模块基本用法实例分析

    这篇文章主要介绍了python threading和multiprocessing模块基本用法,结合实例形式详细分析了Python中threading和multiprocessing模块基本概念、功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-07-07
  • 基于Python2、Python3中reload()的不同用法介绍

    基于Python2、Python3中reload()的不同用法介绍

    今天小编就为大家分享一篇基于Python2、Python3中reload()的不同用法介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python中字符串的修改及传参详解

    Python中字符串的修改及传参详解

    最近在一次使用python实现字符串反转的时候,发现写出的代码居然是错误的,于是通过思考后决定要总结下这次的经历,于是写了这篇文章,本文的内容主要给大家介绍了Python中字符串的修改及传参,有需要的朋友们可以参考借鉴,下面来一起学习学习吧。
    2016-11-11
  • Python中tell()方法的使用详解

    Python中tell()方法的使用详解

    这篇文章主要介绍了Python中tell()方法的使用详解,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python之批量创建文件的实例讲解

    Python之批量创建文件的实例讲解

    今天小编就为大家分享一篇Python之批量创建文件的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05

最新评论