反射是基于面向对象,类的封装和对象创建,可以实现对象的属性或者方法进行增删改查。
反射添加或者覆盖
setattr(对象,方法名字,函数功能)
class A:
def a(self):
print("a实例方法")
def b(self):
print("b实例方法")
def c(self):
print("c实例方法")
def func():
print("func函数")
x=A()
#给x对象添加新的方法。前提必须有该方法或者函数的引用
setattr(x,'e',print) #setattr(对象,方法名字,函数功能)
x.e('e')
setattr(x,'w',func) #对象,方法名字,函数功能
x.w()
#覆盖x对象原来的方法
setattr(x,'a',input) #对象,方法名字,函数功能
y=x.a("请输入")
print(y)
反射删除
delattr(对象名,"实例属性名/类属性名/实例方法/类方法")
class A:
y_cls=1
def __init__(self):
self.y=2
def a(self):
print("a实例方法")
def b(self):
print("b实例方法")
@classmethod
def c(self):
print("c实例方法")
def func():
print("func函数")
x=A()
print(x.y)
delattr(x,"y") #delattr(对象名,"实例属性名/类属性名/实例方法/类方法")
print(x.y)
反射查询
class A:
y_cls=1
def __init__(self):
self.y=2
def a(self):
print("a实例方法")
def b(self):
print("b实例方法")
@classmethod
def c(self):
print("c实例方法")
def func():
print("func函数")
x=A()
print(hasattr(x,"y_cls")) #hasattr(对象名,"实例属性名/类属性名/实例方法/类方法")
print(hasattr(x,"y"))
print(hasattr(x,"a"))
反射读取使用
class A:
y_cls=1
def __init__(self):
self.y=2
def a(self):
print("a实例方法")
def b(self):
print("b实例方法")
@classmethod
def c(self):
print("c实例方法")
def func():
print("func函数")
x=A()
#可以使用getattr()反射把对象的属性或者方法传递给变量进行使用
z=getattr(x,"y_cls") #getattr(对象名,"属性或者方法名")
print(z)
zz=getattr(x,"a")
zz()
157

被折叠的 条评论
为什么被折叠?



