Python實現(xiàn)動態(tài)添加類的屬性或成員函數(shù)的解決方法
某些時候我們需要讓類動態(tài)的添加屬性或方法,比如我們在做插件時就可以采用這種方法。用一個配置文件指定需要加載的模塊,可以根據(jù)業(yè)務(wù)擴展任意加入需要的模塊。
本文就此簡述了Python實現(xiàn)動態(tài)添加類的屬性或成員函數(shù)的解決方法,具體方法如下:
首先我們可以參考ulipad的實現(xiàn):mixin。
這里做的比較簡單,只是聲明一個類,類初始化的時候讀取配置文件,根據(jù)配置列表加載特定目錄下的模塊下的函數(shù),函數(shù)和模塊同名,將此函數(shù)動態(tài)加載為類的成員函數(shù)。
代碼如下所示:
class WinBAS(Bas): def __init__(self): self.__baslist = {} self.__Init_Modules() pass def __Init_Modules(self): import modplugs for m in modplugs.__moduleset__: mh = __import__('modules.' + m)# + '.' + m) ma = getattr(mh, m)# + '.' + m) ma = getattr(ma, m) setattr(self.__class__, m, ma)
modplugs.py是模塊配置文件如下:
__moduleset__ = [ 'BAS_GetUserList', ]
然后建立目錄modules下面建立一個空的__init__.py文件,把目錄變?yōu)橐粋€包,在modules目錄下建立真正的BAS_GetUserList實現(xiàn):BAS_GetUserList文件中有個BAS_GetUserList函數(shù)如下:
def BAS_GetUserList(self, strs): return [0, strs]
這樣WinBAS類就可以動態(tài)加入了BAS_GetUserList函數(shù)。
相關(guān)文章
Python的Flask框架中實現(xiàn)簡單的登錄功能的教程
這篇文章主要介紹了Python的Flask框架中實現(xiàn)簡單的登錄功能的教程,登錄是各個web框架中的基礎(chǔ)功能,需要的朋友可以參考下2015-04-04Python爬蟲實現(xiàn)獲取動態(tài)gif格式搞笑圖片的方法示例
這篇文章主要介紹了Python爬蟲實現(xiàn)獲取動態(tài)gif格式搞笑圖片的方法,結(jié)合實例形式分析了Python針對gif格式圖片的爬取、下載等相關(guān)操作技巧,需要的朋友可以參考下2018-12-12Numpy數(shù)據(jù)轉(zhuǎn)換成image并保存的實現(xiàn)示例
本文主要介紹了Numpy數(shù)據(jù)轉(zhuǎn)換成image并保存的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-12-12python使用pygame模塊實現(xiàn)坦克大戰(zhàn)游戲
這篇文章主要為大家詳細(xì)介紹了python使用pygame模塊實現(xiàn)坦克大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-05-05Python中使用pypdf2合并、分割、加密pdf文件的代碼詳解
這篇文章主要介紹了Python中使用pypdf2合并、分割、加密pdf文件的代碼,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05