Python 反射
反射
在做程序开发中,我们常常会遇到这样的需求:
需要执行对象里的某个方法,或需要调用对象的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在
这时我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这种机制就称之为反射。接下来记录下反射几个的重要方法。
反射的四种方法
hasattr():判断一个对象里是否有对应的字符串方法
getattr():根据字符串去获取obj对象里的对应的方法的内存地址
setattr():给类实例对象动态添加一个新的属性
delattr():给类实例对象动态删除一个已有的属性
# class A:
# def __init__(self):
# self.a = 10
#
# def func1(self):
# print('func1')
#
# def func2(self):
# print('func2')
#
# def func3(self):
# print('func3')
# a = A()
# ret = getattr(a,'ab')
# print(ret)
# for i in range(10):
# res = input('请输入你要访问的地址:')
# if hasattr(a,res): 判断输入的字符是否在类中存在
# f = getattr(a,res)
# f()
# else:
# print('404') 不存在则404
向类中添加数据
class A:
pass
def func(self):
print('这是一个新的函数')
a = A()
b = 1 # 定义一个变量添加到类中
setattr(a,'func',func) # 将函数的功能添加到类中
setattr(a,'b',b)
# a.func(a)
print(a.b)