動態(tài)創(chuàng)建類實例代碼
更新時間:2009年10月07日 22:22:49 作者:
Python中要創(chuàng)建一個類的實例,要首先導(dǎo)入該類或者該類所屬的模塊。
例如:
import mymodule
myobject = mymodule.myclass()
或者
from mymodule import myclass
myobject = myclass()
如果要在程序中動態(tài)地創(chuàng)建類實例,也一樣要分兩步走,例如:
m = __import__('mymodule')
c = getattr(m, 'myclass')
myobject = c()
但是要注意:如果myclass并不在mymodule的自動導(dǎo)出列表中(__all__),則必須顯式地導(dǎo)入,例如:
m = __import__('mymodule', globals(), locals(), ['myclass'])
c = getattr(m, 'myclass')
myobject = c()
若要封裝的規(guī)范一些,可以這樣來做:
Code
class Activator:
'''本類用來動態(tài)創(chuàng)建類的實例'''
@staticmethod
def createInstance(class_name, *args, **kwargs):
'''動態(tài)創(chuàng)建類的實例。
[Parameter]
class_name - 類的全名(包括模塊名)
*args - 類構(gòu)造器所需要的參數(shù)(list)
*kwargs - 類構(gòu)造器所需要的參數(shù)(dict)
[Return]
動態(tài)創(chuàng)建的類的實例
[Example]
class_name = 'knightmade.logging.Logger'
logger = Activator.createInstance(class_name, 'logname')
'''
(module_name, class_name) = class_name.rsplit('.', 1)
module_meta = __import__(module_name, globals(), locals(), [class_name])
class_meta = getattr(module_meta, class_name)
object = class_meta(*args, **kwargs)
return object
import mymodule
myobject = mymodule.myclass()
或者
from mymodule import myclass
myobject = myclass()
如果要在程序中動態(tài)地創(chuàng)建類實例,也一樣要分兩步走,例如:
m = __import__('mymodule')
c = getattr(m, 'myclass')
myobject = c()
但是要注意:如果myclass并不在mymodule的自動導(dǎo)出列表中(__all__),則必須顯式地導(dǎo)入,例如:
m = __import__('mymodule', globals(), locals(), ['myclass'])
c = getattr(m, 'myclass')
myobject = c()
若要封裝的規(guī)范一些,可以這樣來做:
Code
復(fù)制代碼 代碼如下:
class Activator:
'''本類用來動態(tài)創(chuàng)建類的實例'''
@staticmethod
def createInstance(class_name, *args, **kwargs):
'''動態(tài)創(chuàng)建類的實例。
[Parameter]
class_name - 類的全名(包括模塊名)
*args - 類構(gòu)造器所需要的參數(shù)(list)
*kwargs - 類構(gòu)造器所需要的參數(shù)(dict)
[Return]
動態(tài)創(chuàng)建的類的實例
[Example]
class_name = 'knightmade.logging.Logger'
logger = Activator.createInstance(class_name, 'logname')
'''
(module_name, class_name) = class_name.rsplit('.', 1)
module_meta = __import__(module_name, globals(), locals(), [class_name])
class_meta = getattr(module_meta, class_name)
object = class_meta(*args, **kwargs)
return object
相關(guān)文章
Python+OpenAI?Whisper實現(xiàn)視頻生成字幕
這篇文章主要為大家詳細介紹了如何利用Python和OpenAI?Whisper實現(xiàn)視頻生成字幕功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下2024-11-11
python開發(fā)之IDEL(Python GUI)的使用方法圖文詳解
這篇文章主要介紹了python開發(fā)之IDEL(Python GUI)的使用方法,結(jié)合圖文形式較為詳細的分析總結(jié)了Python GUI的具體使用方法,需要的朋友可以參考下2015-11-11
python logging設(shè)置level失敗的解決方法
今天小編就為大家分享一篇python logging設(shè)置level失敗的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
使用Python的Flask框架表單插件Flask-WTF實現(xiàn)Web登錄驗證
Flask處理表單除了本身的WTForms包,使用Flask-WTF擴展來增強表單功能也是很多開發(fā)者的選擇,這里我們就來講解如何使用Python的Flask框架表單插件Flask-WTF實現(xiàn)Web登錄驗證2016-07-07

