python 反射
python 中有很多知识点,反射是高级语言中的一项重要的知识点。使用反射可以让代码更简洁更智能,让代码拥有了自省的能力。
反射是什么
反射可以根据字符串动态的判断,调用,添加/修改,删除类或类的实例化对象
python反射怎么实现对象内容的操作
Python 提供了四个方法进行类对象内容的操作
hasattr(obj,str) 判断一个实例对象obj里是否有对应的str字符串的方法
getattr(obj,str) 根据字符串获取obj对象里对应的方法的内存地址
setattr(obj,str,value) 通过str字符串去设置obj对象里的属性的值value或添加value相同的方法名的方法
**delattr(obj,str)**删除和字符串名字一致的属性或方法
代码中理解反射
代码中理解反射
#定义一个类
class student(object):
def __init__(self,name):
self.name = name
#定义方法
def study(self):
print('%s in the room study'%self.name)
#实体化学生类
stuobj = student('shanghai');
def fun(self):
print('%s play game-0-0'%self.name)
str = input("输入的字符串str:")
#判断字符串是不是类中的属性或方法
if hasattr(stuobj,str):
#动态调用方法
func = getattr(stuobj,str)
#func调用
func()
#动态修改属性
setattr(stuobj,str,"beijing")
#动态删除方法或者属性
delattr(stuobj,str)
else:
#如果没有该字符串方法,创建一个新的与字符串方法相同的方法,动态的把方法装配到 类中或类的实例化对象中
setattr(stuobj,str,fun)
#用类的实例化对象调用这个方法,并且传入这个实例化对象
stuobj.talk(stuobj)
类的反射特点
类,只能找类里面的成员
class Foo:
def __init__(self,name):
self.name = name
def show(self):
print('show')
obj = Foo('Abey')
print(hasattr(Foo,'show')) #True
对象,既可以找对象,也可以找类里面的成员
class Foo:
def __init__(self,name):
self.name = name
def show(self):
print('show')
#obj = Foo('Abey')
#print(hasattr(Foo,'show)) #True
#print(hasattr(Foo,'name))#False
obj = Foo('Abey')
print(hasattr(obj,'name'))#True
prin(hasattr(obj,'show'))#True