一般的高阶语言都有反射的功能特性,python也不例外,网上资料显示,python支持类反射和模块反射,今天就先学习一下类反射的相关知识,模块反射后续再展开把。Python的类反射用于把字符串(对应于属性或方法)反射成内存中的地址对象,以便按需调用,实现某些特性的动态装配,它主要通过hasattr()、getattr()、setattr()、和delattr()来实现,类似于数据库的增删改查操作把。
二、反射函数
以下内容主要思想转自师兄张其高的博客https://www.cnblogs.com/zhangqigao/articles/6947023.html
2.1 hasattr(obj, name_str)
作用:判断一个对象obj中是否有对应的name_str字符串所代表的属性或者方法,返回布尔值。注意这里的对象可以是类,也可以是实例化的对象。
1 class Dog(object): 2 3 def __init__(self, name): 4 self.name = name 5 6 def eat(self, food): 7 print('%s is eating %s' % (self.name, food)) 8 9 obj1 = Dog('XiaoHuang') 10 11 print('obj1:\t %s ' % hasattr(obj1, 'name')) #判断属性 12 print('class Dog:\t %s' % hasattr(Dog, 'eat')) #判断方法 13 14 input = input(">>>:").strip() #动态输入字符串,动态判断 15 print(hasattr(obj1, input)) 16 17 输出: 18 obj1: True 19 class Dog: True 20 >>>:food 21 False