反射(高大上)类的内置方法
Posted 小杜要加油
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射(高大上)类的内置方法相关的知识,希望对你有一定的参考价值。
反射
对象的反射
类的反射
模块的反射
本模块的反射:找到本模块sys.modules[__name__]
python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射)
hasattr() 函数用于判断对象是否包含对应的属性。 getattr() 函数用于返回一个对象属性值。 setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在。 delattr 函数用于删除属性。 delattr(x, ‘foobar‘) 相等于 del x.foobar。
class Foo: f = ‘类的静态变量‘ def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print(‘hi,%s‘%self.name) obj=Foo(‘egon‘,73) #检测是否含有某属性 print(hasattr(obj,‘name‘)) #输出结果:True print(hasattr(obj,‘say_hi‘)) #输出结果:True #获取属性 n=getattr(obj,‘name‘) print(n) #输出结果:egon func=getattr(obj,‘say_hi‘) func() #输出结果:hi,egon #设置属性 setattr(obj,‘sb‘,True) setattr(obj,‘show_name‘,lambda self:self.name+‘sb‘) print(obj.__dict__)
#输出结果:{‘name‘: ‘egon‘, ‘age‘: 73, ‘sb‘: True, ‘show_name‘: <function <lambda> at 0x00000194A8817048>} print(obj.show_name(obj)) #删除属性 delattr(obj,‘age‘) delattr(obj,‘show_name‘) print(obj.__dict__)
#输出结果:{‘name‘: ‘egon‘, ‘sb‘: True}
hasattr(对象名,‘属性名‘) 返回True或False 属性值 = getattr(对象名,‘属性名‘) 方法的内存地址 = getattr(对象名,‘方法名‘) 方法的内存地址()
以上是关于反射(高大上)类的内置方法的主要内容,如果未能解决你的问题,请参考以下文章