Python反射的用法实例分析

作者:喷跑的豆子 时间:2023-11-09 13:29:54 

本文实例讲述了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程序设计有所帮助。

来源:http://blog.csdn.net/y472360651/article/details/73277957

标签:Python,反射
0
投稿

猜你喜欢

  • node.js中的fs.statSync方法使用说明

    2024-05-13 10:05:29
  • Python中使用matplotlib模块errorbar函数绘制误差棒图实例代码

    2022-11-09 17:01:42
  • 详解MySQL数据类型之数字类型正确使用

    2010-06-20 15:02:00
  • python中对数据进行各种排序的方法

    2022-05-31 15:26:55
  • 一次MySQL慢查询导致的故障

    2024-01-21 12:18:17
  • python读取当前目录下的CSV文件数据

    2022-04-06 16:50:35
  • python列表插入append(), extend(), insert()用法详解

    2021-05-12 13:32:40
  • Python装饰器的应用场景及实例用法

    2022-06-24 16:09:03
  • 一文深入了解Python中的继承知识点

    2023-01-16 19:57:16
  • Python实现滑雪小游戏

    2023-08-10 15:30:03
  • 详解设计模式中的工厂方法模式在Python程序中的运用

    2022-11-14 01:06:58
  • 使用Python开发游戏运行脚本成功调用大漠插件

    2021-03-09 21:05:53
  • SQL中的三种去重方法小结

    2024-01-23 20:19:15
  • Python实现批量下载音效素材详解

    2021-09-19 02:08:27
  • MySQL数据表分区策略及优缺点分析

    2024-01-22 05:37:19
  • HTML5实现留言和回复页面样式

    2024-04-18 10:32:20
  • AI:如何训练机器学习的模型

    2023-01-16 13:18:49
  • mysql添加索引方法详解(Navicat可视化加索引与sql语句加索引)

    2024-01-24 22:32:37
  • Python 语句的表达式和缩进

    2023-11-26 18:28:24
  • 通过字符串导入 Python 模块的方法详解

    2023-10-15 03:00:56
  • asp之家 网络编程 m.aspxhome.com