标签:__ 反射 abc name python self print 机制 talk
转自https://www.cnblogs.com/renjie1105/p/15909285.html
python反射简介
在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射。
hasattr
判断对象中是否有这个方法或变量
class Person:
def __init__(self, name):
self.name = name
def talk(self):
print(f'{self.name}正在交谈')
p = Person('alice')
print(hasattr(p, 'talk'))
print(hasattr(p, 'name'))
print(hasattr(p, 'abc'))
输出:
True
True
False
getattr
获取对象中的方法或变量的内存地址
class Person:
def __init__(self, name):
self.name = name
def talk(self):
print(f'{self.name}正在交谈')
p = Person('alice')
n = getattr(p, 'name') # 获取name变量的内存地址
print(n)
f = getattr(p, 'talk') # 获取talk方法的内存地址
f()
s = getattr(p, 'abc', 'not find') # 打印结果:not find。
# 因为abc在对象p中找不到,本应该报错,
# 属性找不到,但因为修改了找不到就输出not find
print(s)
setattr
为对象添加变量或方法
def abc(self):
print(f'{self.name}正在交谈')
class Person:
def __init__(self, name):
self.name = name
p = Person('alice')
setattr(p, 'talk', abc) # 将abc函数添加到对象p中,并命名为talk
p.talk(p) # 调用talk方法,因为这是额外添加的方法,需手动传入对象
setattr(p, 'age', 30) # 添加一个变量age,初始值为30
print(p.age)
delattr
删除对象中的变量,但是不能删除方法
标签:__,反射,abc,name,python,self,print,机制,talk 来源: https://www.cnblogs.com/foghorn/p/16278703.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。