2015-06-08 58 views
1

我正在開發一個腳本,它解析大量的ID並想構建一個可以容納所有這些ID的抽象。我也希望這個對象能夠被輕鬆修改以添加新的ID。Python類型使用變量進行調度,這有可能嗎?

這是我到目前爲止有:

class action: # abstraction for all IDs in an action 
def __init__(self, dID=".", cID='.', dTp='.', dVs='.', mcID='.', aID='.', lID='.', pID='.', uID='.', uSe='.', udTp='.', componentID='.', eCx='.', eUr='.', eTp='.', rUrl='.', sec='.', oID='.', oVa='.', oCu='.', sID='.', saID='.', socNetworkUserID='.'): 
    self._dID = dID 
    self._cID = cID 
    self._dTp = dTp 
    self._dVs = dVs 
    self._mcID = mcID 
    self._aID = aID 
    self._lID = lID 
    self._pID = pID 
    self._uID = uID #Display and Insights 
    self._uSe = uSe 
    self._udTp = udTp 
    self._componentID = componentID 
    self._eCx = eCx #Display and Insights 
    self._eUr = eUr 
    self._eTp = eTp #Display and Insights 
    self._rUrl = rUrl 
    self._sec = sec 
    self._oID = oID #Display and Insights 
    self._oVa = oVa 
    self._oCu = oCu 
    self._sID = sID 
    self._saID = saID 
    self._socNetworkUserID = socNetworkUserID 
    self._empty_params = [] 

def insert_id_val(self, name, value): #Utility method 
    return 

def insert_id_val_display(self, name, value): 
    item_map = {"dID" : _dID, "cID" : _cID, "dTp" : _dTp, "dVs" : _dVs, 
       "mcID" : _mcID, "aID" : _aID, "lID" : _lID, "pID" : _pID, 
       "uID" : _uID, "uSe" : _uSe, "udTp" : _udTp, "componentID" : _componentID, 
       "eCx" : _eCx,"eUr" : _eUr, "eTp" : _eTp, "rUrl" : _rUrl, 
       "sec" : _sec, "oID" : _oID, "oVa" : _oVa, "oCu" : _oCu, 
       "socNetworkUserID" : _socNetworkUserID, "_" : _empty_params} 
    self.item_map[name] = value 

def insert_id_val_insights(self, name, value): 
    item_map = {"eTp" : self._eTp, "eCx" : self._eCx, "uID" : self._uID, "oID" : self._oID, 
       "sID" : self._sID, "saID" : self._saID} 
    item_map[name] = value 

我想這樣做型調度用兩種不同的方式,在兩個不同的插入功能的兩種方式,但他們都錯誤。我看過一些例子,其中人們做的事情就像Type-Dispatching Example 但他們不顯示如何使用類型調度與設置,只有得到。

我的實現提供:

global name '_dID' is not defined at line 193 of program.py 

如何與設置變量一個利用類型調度?它甚至有可能嗎?如果沒有,我怎麼可以快速地做出像上面那樣的抽象而不必輸入一堆if語句?

編輯:添加,我不能實例化所有的ID對象,因爲它們的值在實例化時是未知的。

+0

你有沒有考慮過你的類是從'dict'類繼承的? –

+0

你能否詳細說明一下? @MichaelPetch –

回答

1

我真的不確定你在這裏問什麼,或者你究竟是什麼意思,通過類型調度。如果你問如何動態地設置在一個類的屬性,你可以很容易地做到這一點與**kwargs

def __init__(self, **kwargs): 
    self.__dict__.update(kwargs) 

,現在你可以用action(dID='foo', oID='bar')實例並在內部參考self.dIDself.oID

+0

嗯,我想這將是動態調度,但與屬性,而不是功能。此外,(應該說,有問題,將更新)每個ID被添加到對象一個接一個,而不是在瞬間知道,所以我不認爲上述會工作得很好..? –

+0

好吧,記得Python不是Java。您可以隨時將任何屬性設置到對象上,因此您始終可以執行my_action_instance.myID ='my_value'。 –

+0

確實如此,但是如果每個ID的語句都需要,否?我試圖避免冗餘和冗長的代碼中的陳述。設置ID值的事情是,如果仍然需要聲明,因爲python不知道要設置哪個ID屬性,對嗎?我猜想,那麼有沒有避免它? –

相關問題