Python 的反射机制
程序员文章站
2022-03-26 15:09:59
什么叫做反射 利用字符串的形式去对象(模块)中操作(查找/添加/获取/删除)成员,一种基于字符串的事件驱动。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 函数简介 ~~~~ hasattr( args, kwargs) ......
什么叫做反射
利用字符串的形式去对象(模块)中操作(查找/添加/获取/删除)成员,一种基于字符串的事件驱动。
可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
函数简介
hasattr(*args, **kwargs):判断对象(模块)中某个函数或者变量是否存在 setattr(x, y, v):给对象(模块)添加一个函数或变量 getattr(object, name, default=None):获取对象(模块)中的一个函数或变量 delattr(x, y):删除对象(模块)中的一个函数或变量 可以通过 __import__ 方法来导入一个模块 注:hasattr,setattr,delattr 对模块的修改都在内存中进行,并不会影响文件中真实内容
实例
__Author__ = "Lance#" # -*- coding = utf-8 -*- def default(): print("This is a default function.") class Man(): def __init__(self, name): self.__name = name def eat(self): print("%s is eating ...." % self.__name) def age(self): print("age is secret") if __name__ == '__main__': m = Man("Lance") while True: str = input("Please input:") if hasattr(m, str): func = getattr(m, str) else: setattr(m, str, default) func = getattr(m, str) func() try: delattr(m, str) print('Del attr OK') except: pass #print('Can not del method of a class or there is no this attr')
运行结果
Please input:age age is secret Please input:eat Lance is eating .... Please input:height This is a default function. Del attr OK
delattr 使用注意事项
1. 函数作用用来删除指定对象的指定名称的属性,和 setattr 函数作用相反 2. 当属性不存在的时候,会报错 3. 不能删除对象的方法