我正在开发一个解析大量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实例化对象,因为它们的值在实例化时是未知的。
答案 0 :(得分:1)
我真的不确定你在这里问什么,或者你的类型调度究竟是什么意思。如果您询问如何在类中动态设置属性,可以使用**kwargs
轻松完成:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
现在您可以使用action(dID='foo', oID='bar')
对其进行实例化,并在内部引用self.dID
和self.oID
。