09-Python反射 getattr()

本文介绍了Python中的反射机制,包括hasattr函数用于检查对象是否包含特定方法或变量,以及getattr用于获取对象的方法或变量的内存地址。当属性不存在时,getattr可以设置默认返回值避免错误。通过示例展示了这两个函数的使用方法。

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

1. 背景:

我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在。
此时我们需要用一个特殊的方法或机制访问和操作这个未知的方法或变量,这种机制就称之为反射。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值