動態(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機(jī)器學(xué)習(xí)實戰(zhàn)之最近鄰kNN分類器
這篇文章主要介紹了python機(jī)器學(xué)習(xí)實戰(zhàn)之最近鄰kNN分類器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Windows下安裝python2.7及科學(xué)計算套裝
這篇文章主要向大家介紹的是在windows系統(tǒng)下安裝python 2.7以及numpy安裝、six安裝、dateutil安裝、pyparsing安裝、matplotlib安裝和scipy安裝的方法,分享給大家,需要的小伙伴可以參考下,相對來說,windows下的安裝還是比較簡單的。2015-03-03Python實現(xiàn)簡易過濾刪除數(shù)字的方法小結(jié)
這篇文章主要介紹了Python實現(xiàn)簡易過濾刪除數(shù)字的方法,結(jié)合實例形式總結(jié)分析了Python基于正則及內(nèi)置函數(shù)過濾刪除數(shù)字的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01Python內(nèi)建函數(shù)Built_in Funtions用法示例詳解
這篇文章主要為大家介紹了Python內(nèi)建函數(shù)Built_in Funtions用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08python之生成多層json結(jié)構(gòu)的實現(xiàn)
今天小編就為大家分享一篇python之生成多層json結(jié)構(gòu)的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02