Python 反射
Posted chimeiwangliang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 反射相关的知识,希望对你有一定的参考价值。
在程序开发中,常常会遇到这样的需求:在执行对象中的某个方法,或者在调用对象的某个变量,但是由于一些原因,我们无法确定或者并不知道该方法或者变量是否存在,这时我们需要一个特殊的方法或者机制来访问或操作该未知的方法或变量,这种机制就被称之为反射。
反射机制:反射就是通过字符串的形式,导入模块;通过字符串的形式,去模块中寻找指定方法和属性,对其进行操作。也就是利用字符串的形式去对象(模块)中操作(查找or获取or删除or添加)成员。
方法说明:
hasattr(obj,name_str) 判断objec是否有name_str这个方法或者属性
getattr(obj,name_str,default) 获取object对象中与name_str同名的方法或者函数,没有默认返回default
setattr(obj,name_str,value) 为object对象设置一个以name_str为名的value方法或者属性
delattr(obj,name_str) 删除object对象中的name_str属性
class auth(): def __init__(self,name): self.name = name def send(self): return ‘{},Func:send‘.format(self.name) def get(self): return ‘{},Func:get‘.format(self.name) Auth = auth(‘jack‘) print(hasattr(Auth,‘name‘)) print(getattr(Auth,‘sen1d‘,object)()) print(setattr(Auth,‘count‘,lambda x:x**x)) print(delattr(Auth,‘name‘)) #删除的必须写属性,方法是不行的
反射实例:
动态导入模块
import importlib
__import__(‘import_lib.metaclass‘) #这是解释器自己内部用的
#importlib.import_module(‘import_lib.metaclass‘) #与上面这句效果一样,官方建议用这个
1、
2、
以上是关于Python 反射的主要内容,如果未能解决你的问题,请参考以下文章