溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數(shù)據(jù)庫 > 
  • python 知識點:反射 之 getattr()實現(xiàn)以字符串形式導入模塊和執(zhí)行函數(shù)

python 知識點:反射 之 getattr()實現(xiàn)以字符串形式導入模塊和執(zhí)行函數(shù)

發(fā)布時間:2020-07-21 15:06:03 來源:網(wǎng)絡 閱讀:513 作者:TtrToby 欄目:數(shù)據(jù)庫
# -*- coding: utf-8 -*-
#知識點:反射
#通過字符串的形式去導入模塊,這就是反射
#并以字符串的形式執(zhí)行函數(shù)

#先看簡單的小粒子
temp = 'mysql' #這個字符串是模塊的名字(也就是mysql.py或sqlserver.py,后綴名不用寫)
func = 'count' #這個字符串是函數(shù)的名字(也就是mysql.py/sqlserver.py中的函數(shù)count)
model = __import__(temp)    #以字符串的形式導入模塊

#執(zhí)行模塊中的函數(shù)第一種方法
print model.count() 

#執(zhí)行模塊中的函數(shù)第二種方法
Function = getattr(model,func) #以字符串的形式執(zhí)行函數(shù)
print Function()


#下面模擬一個數(shù)據(jù)庫連接的小粒子
#準備以下兩個文件

'''
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()

#目前模擬的是默認連接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


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI