反射 #hasattr(obj,name_str)判断一个对象obj里是否有对应的name_str字符串的方法 #getattr(obj,name_str)根据字符串去获取obj对象里的对应的方法的内存地址 #setattr(object, name, value) setattr(x,“foobar”,123)相当于x.foobar = 123。 #delattr(object, name) 该函数删除该obj的一个由string指定的属性。delattr(x, 'foobar')=del x.foobar
class test(object):def __init__(self,name):self.name=namedef test1(self,fruit):print("%s吃%s水果"%(self.name,fruit))
T=test('王荔')#存在此方法
if hasattr(T,'test1'):#检查成员func=getattr(T,'test1')#获取方法地址func('西瓜')
else:setattr(T,'name','王力') #设置成员print(T.name)#不存在此方法,设置变量或修改变量
if hasattr(T,'test10'):#检查成员func=getattr(T,'name')#获取变量print(func)else:setattr(T,'age',30) #设置变量setattr(T, 'name','王力') #修改变量print(T.name,T.age)#通过setattr方法把test3函数动态装配到T这个实例里,方法名是"test2"
def test3(self):print('类外的方法绑定到类内')
setattr(T,'test2',test3)
func=getattr(T,'test2')
func(T)#删除变量、删除方法
delattr(T,'name')
#delattr(T,'test1')
#print(T.name)
#print(T.test1())C:\Users\wangli\PycharmProjects\AutoMation\venv\Scripts\python.exe C:/Users/wangli/PycharmProjects/AutoMation/case/test.py
王荔吃西瓜水果
王力 30
类外的方法绑定到类内Process finished with exit code 0