python 反射

本文深入讲解了Python中的反射机制,包括如何使用hasattr、getattr、setattr和delattr等函数来检查、获取、设置和删除对象的属性。通过具体示例,如创建Person类并对其属性进行操作,详细展示了这些函数的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     在做程序开发过程中个,我们需要执行对象里面的某个方法,或者调用对象中的某个变量,当由于我们无法确定这个方法或变量是否存在,

 这时我们就需要一个特殊的方法或机制要访问或操作这个方法或变量,这种机制就就叫做反射

hasattr(obj,name_str)  判断obj对象中是否有对应的name_str字符串的方法(其中obj为对象名,name_str为字符串)

getattr(obj,name_str)   根据字符串name_str去获得obj对象里对应的方法的内存地址

 

 1 class Person(object):
 2     def __init__(self,name):
 3         self.name = name
 4     def talk(self):
 5         print("%s正在交谈"%self.name)
 6 
 7 p = Person("laowang")        
 8 print(hasattr(p,"talk"))    # True。因为存在talk方法
 9 print(hasattr(p,"name"))    # True。因为存在name变量
10 print(hasattr(p,"abc"))     # False。因为不存在abc方法或变量
11 
12 ---------------------
View Code

 setattr(obj,'name_str',abc)  为obj对象添加abc方法或变量并命名为name_str

 1 def abc(self):
 2     print("%s正在交谈"%self.name)
 3 
 4 class Person(object):
 5     def __init__(self,name):
 6         self.name = name
 7 
 8 p = Person("laowang")
 9 setattr(p,"talk",abc)   # 将abc函数添加到对象中p中,并命名为talk
10 p.talk(p)               # 调用talk方法,因为这是额外添加的方法,需手动传入对象
11 
12 
13 setattr(p,"age",30)     # 添加一个变量age,复制为30
14 print(p.age)            # 打印结果:30
15 
16 ---------------------
View Code

delattr(obj,'name_str')   删除obj对象中的变量name_str  ,注意不能用于删除方法

 1 class Person(object):
 2     def __init__(self,name):
 3         self.name = name
 4     def talk(self):
 5         print("%s正在交谈"%self.name)
 6 
 7 p = Person("laowang")
 8 
 9 delattr(p,"name")       # 删除name变量
10 print(p.name)           # 此时将报错
11 
12 ---------------------
13 
14 本文来自 喷跑的豆子 的优快云 博客 ,全文地址请点击:https://blog.youkuaiyun.com/y472360651/article/details/73277957?utm_source=copy 
View Code

 

转载于:https://www.cnblogs.com/liushaohui/p/9758778.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值