反射就是根据提供的字符串,匹配对象(类、模块等)里面的方法。达到动态调用的目的。
主要有四个成员。getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员
语法:
getattr(对象,字符串)
setattr(对象,字符串,val)
hasattr(对象,字符串)
delattr(对象,字符串)
'''一个简单的例子''' # 定义一个symbol类,有a,b,c三个方法。 class Symbol( object ): def a(): pass def b(): pass def c(): pass # 输入方法名,执行对应方法。 S = Symbol() method = input ( 'input method name:' ).strip() if hasattr (Symbol,method): # 判断是否存在输入的方法名 getattr (Symbol,method) # 如果存在则运行方法 else : print ( "Error!Not Found!" ) |
下面是使用__import__导入模块的例子:
相同目录导入
import commons
__import__('commons')
多层目录导入
from list.text import commons
__import__(' list.text.commons',fromlist=True) #如果不加上fromlist=True,只会导入list目录
而在使用的时候也可以动态输入模块名!
def main(): imp = input ( 'input model name:' ) # 输入模块名 med = input ( 'input method name:' ) # 输入方法名 print (imp ,med ) try : obj = __import__ (imp ) #导入该模块 print (obj) if hasattr (obj,med): #判断有没有这个方法 fuc = getattr (obj,med) #获得这个方法 fuc() else : print ( 'Error not found method!' ) except : print ( 'Error not found model!' ) if __name__ = = '__main__' : main() |
官方建议使用标准库importlib
import importlib lib = importlib.import_moudle( "lib\func" ) #lib\func是模块路径 |
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評論
評論
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦