2011-03-22 79 views
0

好的,我最近開始用Python編程,我非常喜歡它。帶「指針」的Python函數

但是,我遇到了一個小問題。

我希望能夠定義一個函數來接收某些數據並將其分配給我指定的變量,而不是每次我要提交該值時都必須執行該操作。

下面是一個代碼片段:

 try: 
      if elem.virtual.tag: 
       virt = True 
       temp_asset.set_virtual(True) 
     except AttributeError: 
      temp_asset.set_virtual(False) 
     if virt: #if virtual, get only faction, value, and range for presence 
      try: 
       fac = elem.presence.faction #an xml tag (objectified) 
      except AttributeError: 
       fac = "faction tag not found" 
       temp_asset.misload = True 
      try: 
       val = elem.presence.value 
      except AttributeError: 
       val = "value tag not found" 
       temp_asset.misload = True 
      try: 
       rang = elem.presence.range 
      except AttributeError: 
       rang = "range tag not found" 
       temp_asset.misload = True 
      #Set presence values 
      temp_asset.set_presence(fac, val, rang) 

功能設置的值,但我希望能夠執行錯誤的東西像這樣的檢查:

def checkval(self, variable_to_set, tag_to_use) 
    try: 
     variable_to_set = tag_to_use 
    except AttributeError: 
     variable_to_set = "tag not found" 
     temp_asset.misload = True 

這是可行的?讓我知道是否需要顯示更多代碼。

編輯:我不需要指針本身,只是任何這樣工作,並保存輸入。

編輯2:或者,我需要一個如何檢查是否存在對象化xml節點(lxml)的解決方案。

+1

您可能需要顯示* less * code。用最少的代碼片斷來提煉你的問題,這些代碼片段可以幫助你顯示你在做什麼之後沒有太多細節。 – Santa 2011-03-22 01:07:15

+0

舉報「不是一個真正的問題」,因爲提問者已經提出了一個旨在替代的不同的,更有針對性的(因此更多可回答的)問題。 – 2011-03-22 11:42:28

+0

好吧,我會問另外一個問題,因爲我在這個問題上走錯了方向。我還需要一個更好的標題。對於那個很抱歉。如果你想跟隨它的進展,我會從這裏鏈接到它。 編輯:這是新的問題: http://stackoverflow.com/questions/5385821/python-lxml-objectify-checking-whether-a-tag-exists – Biosci3c 2011-03-22 01:41:47

回答

1

您是否嘗試過/看着getattrsetattr函數?

例如,假定這些「變量」的對象屬性:

def checkval(self, attr, presence, tagstr): 
    tag = getattr(presence, tagstr, None)   # tag = presence."tagstr" or None 
    setattr(self, attr, tag or 'tag not found')  # ?? = presence."tagstr" or 'tag not found'  
    if tag is None: 
     self.temp_asset.misload = True 

你這樣稱呼它,

your_object.checkval('fac', elem.presence, 'faction') 

或者,你可以預先定義這些變量和前設置它們的默認值你試圖查找標籤。例如:

class YourObject(object): 
    _attrmap = { 
     'fac': 'faction', 
     'val': 'value', 
     'rang': 'range', 
    } 

    def __init__(self): 
     # set default values 
     for attr, tagstr in self._attrmap.items(): 
      setattr(self, attr, '%s tag not found' % tagstr) 

    def checkval(self, attr, presence): 
     for attr, tagstr in self._attrmap.items(): 
      tag = getattr(presence, tagstr, None) 
      if tag is not None: 
       setattr(self, attr, tag) 
      else: 
       self.temp_asset.misload = True 
+0

好吧,這是一個想法。我想要設置的變量的確是一個對象屬性(一個對象的變量)。標籤是一個包含字符串的客體化lxml節點。基本上,我正在檢查是否存在xml節點,然後將該變量設置爲包含的任何內容。如果它不存在,那麼我將它設置爲預定義的字符串。 – Biosci3c 2011-03-22 01:18:29

+0

針對該用例進行了編輯。你基本上必須在兩個單獨的對象上使用'getattr'和'setattr':這些「變量」所屬的對象和對象化的節點。 – Santa 2011-03-22 01:20:41

+0

是的,我可能會創建一個關於lxml和objectify的新問題,因爲我不認爲我想去「指針」路線。 – Biosci3c 2011-03-22 01:25:34