一般的高阶语言都有反射的功能特性,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
View Code

相关文章: