# -*- coding: utf-8 -*-
#知識點:反射
#通過字符串的形式去導(dǎo)入模塊,這就是反射
#并以字符串的形式執(zhí)行函數(shù)
#先看簡單的小粒子
temp = 'MySQL' #這個字符串是模塊的名字(也就是mysql.py或sqlserver.py,后綴名不用寫)
func = 'count' #這個字符串是函數(shù)的名字(也就是mysql.py/sqlserver.py中的函數(shù)count)
model = __import__(temp) #以字符串的形式導(dǎo)入模塊
#執(zhí)行模塊中的函數(shù)第一種方法
print model.count()
#執(zhí)行模塊中的函數(shù)第二種方法
Function = getattr(model,func) #以字符串的形式執(zhí)行函數(shù)
print Function()
#下面模擬一個數(shù)據(jù)庫連接的小粒子
#準(zhǔn)備以下兩個文件
'''
mysql.py文件模擬連接mysql數(shù)據(jù)庫,連接正常返回1
# -*- coding: utf-8 -*-
def count():
return 1
sqlserver.py文件模擬連接sqlserver數(shù)據(jù)庫,連接正常返回2
# -*- coding: utf-8 -*-
def count():
return 2
'''
#注意:mysql.py和sqlserver.py兩個文件自行定義即可,這里近用于模擬作用
#并非是實際連接數(shù)據(jù)庫的語句
def db_count(db_name):
temp = db_name #模塊的名字(也就是mysql或sqlserver)
func = 'count' #函數(shù)的名字(也就是mysql.py/sqlserver.py中的函數(shù)count)
model = __import__(temp)
Function = getattr(model,func) #以字符串的形式執(zhí)行函數(shù)
return Function()
#目前模擬的是默認(rèn)連接sqlserver數(shù)據(jù)庫
status = db_count('sqlserver')
#檢查連接sqlserver的狀態(tài)(正常狀態(tài)為:2),如果不能連接,則切換連接到mysql
if status != 2:
status = db_count('mysql')
print '已切換為mysql,連接ID:%d' % status
else:
print 'sqlserver連接正常,連接ID:%d' % status
#測試動作:
#1、可將sqlserver.py中的count返回值修改成3
分享文章:python知識點:反射之getattr()實現(xiàn)以字符串形式導(dǎo)入模塊和執(zhí)行函數(shù)
網(wǎng)址分享:
http://weahome.cn/article/jodpgp.html