2011-03-22 53 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