Python类型使用变量进行调度,是否可以?

时间:2015-06-08 21:22:18

标签: python types

我正在开发一个解析大量ID的脚本,并希望构建一个可以容纳所有这些ID的抽象。我还希望能够轻松修改此对象以添加新ID。

这是我到目前为止所做的:

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实例化对象,因为它们的值在实例化时是未知的。

1 个答案:

答案 0 :(得分:1)

我真的不确定你在这里问什么,或者你的类型调度究竟是什么意思。如果您询问如何在类中动态设置属性,可以使用**kwargs轻松完成:

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

现在您可以使用action(dID='foo', oID='bar')对其进行实例化,并在内部引用self.dIDself.oID