Python反射的用法实例分析

yipeiwu_com7年前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 利用切片从列表中取出一部分使用的方法

我想从列表中取出一部分拿来使用,可以创建切片,指定需要使用的第一个元素和最后一个元素的索引 使用例子,说明切片的使用 #创建一个数字列表,代表我有100页文章,然后进行分页显示 ma...

对Python 检查文件名是否规范的实例详解

如下所示: # coding=utf-8 import os import os.path import re import array import cmd import pdb...

python使用fcntl模块实现程序加锁功能示例

本文实例讲述了python使用fcntl模块实现程序加锁功能。分享给大家供大家参考,具体如下: python 中引入给文件加锁的 fcntl模块 import fcntl 打开...

python中正则表达式的使用详解

python中正则表达式的使用详解

从学习Python至今,发现很多时候是将Python作为一种工具。特别在文本处理方面,使用起来更是游刃有余。 说到文本处理,那么正则表达式必然是一个绝好的工具,它能将一些繁杂的字符搜索或...

TensorFlow——Checkpoint为模型添加检查点的实例

TensorFlow——Checkpoint为模型添加检查点的实例

1.检查点 保存模型并不限于在训练模型后,在训练模型之中也需要保存,因为TensorFlow训练模型时难免会出现中断的情况,我们自然希望能够将训练得到的参数保存下来,否则下次又要重新训练...