動(dòng)態(tài)創(chuàng)建類實(shí)例代碼
更新時(shí)間:2009年10月07日 22:22:49 作者:
Python中要?jiǎng)?chuàng)建一個(gè)類的實(shí)例,要首先導(dǎo)入該類或者該類所屬的模塊。
例如:
import mymodule
myobject = mymodule.myclass()
或者
from mymodule import myclass
myobject = myclass()
如果要在程序中動(dòng)態(tài)地創(chuàng)建類實(shí)例,也一樣要分兩步走,例如:
m = __import__('mymodule')
c = getattr(m, 'myclass')
myobject = c()
但是要注意:如果myclass并不在mymodule的自動(dòng)導(dǎo)出列表中(__all__),則必須顯式地導(dǎo)入,例如:
m = __import__('mymodule', globals(), locals(), ['myclass'])
c = getattr(m, 'myclass')
myobject = c()
若要封裝的規(guī)范一些,可以這樣來(lái)做:
Code
class Activator:
'''本類用來(lái)動(dòng)態(tài)創(chuàng)建類的實(shí)例'''
@staticmethod
def createInstance(class_name, *args, **kwargs):
'''動(dòng)態(tài)創(chuàng)建類的實(shí)例。
[Parameter]
class_name - 類的全名(包括模塊名)
*args - 類構(gòu)造器所需要的參數(shù)(list)
*kwargs - 類構(gòu)造器所需要的參數(shù)(dict)
[Return]
動(dòng)態(tài)創(chuàng)建的類的實(shí)例
[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()
如果要在程序中動(dòng)態(tài)地創(chuàng)建類實(shí)例,也一樣要分兩步走,例如:
m = __import__('mymodule')
c = getattr(m, 'myclass')
myobject = c()
但是要注意:如果myclass并不在mymodule的自動(dòng)導(dǎo)出列表中(__all__),則必須顯式地導(dǎo)入,例如:
m = __import__('mymodule', globals(), locals(), ['myclass'])
c = getattr(m, 'myclass')
myobject = c()
若要封裝的規(guī)范一些,可以這樣來(lái)做:
Code
復(fù)制代碼 代碼如下:
class Activator:
'''本類用來(lái)動(dòng)態(tài)創(chuàng)建類的實(shí)例'''
@staticmethod
def createInstance(class_name, *args, **kwargs):
'''動(dòng)態(tài)創(chuàng)建類的實(shí)例。
[Parameter]
class_name - 類的全名(包括模塊名)
*args - 類構(gòu)造器所需要的參數(shù)(list)
*kwargs - 類構(gòu)造器所需要的參數(shù)(dict)
[Return]
動(dòng)態(tài)創(chuàng)建的類的實(shí)例
[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寫腳本自動(dòng)評(píng)論再也不怕碰到噴子
這篇文章主要介紹了如何用Python寫腳本哎實(shí)現(xiàn)網(wǎng)站上自動(dòng)評(píng)論,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之最近鄰kNN分類器
這篇文章主要介紹了python機(jī)器學(xué)習(xí)實(shí)戰(zhàn)之最近鄰kNN分類器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Windows下安裝python2.7及科學(xué)計(jì)算套裝
這篇文章主要向大家介紹的是在windows系統(tǒng)下安裝python 2.7以及numpy安裝、six安裝、dateutil安裝、pyparsing安裝、matplotlib安裝和scipy安裝的方法,分享給大家,需要的小伙伴可以參考下,相對(duì)來(lái)說(shuō),windows下的安裝還是比較簡(jiǎn)單的。2015-03-03Python實(shí)現(xiàn)簡(jiǎn)易過(guò)濾刪除數(shù)字的方法小結(jié)
這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)易過(guò)濾刪除數(shù)字的方法,結(jié)合實(shí)例形式總結(jié)分析了Python基于正則及內(nèi)置函數(shù)過(guò)濾刪除數(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)的實(shí)現(xiàn)
今天小編就為大家分享一篇python之生成多層json結(jié)構(gòu)的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02一篇文章搞懂Python反斜杠的相關(guān)問(wèn)題
這篇文章主要給大家介紹了如何通過(guò)一篇文章搞懂Python反斜杠的相關(guān)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03