我已经设置了自定义namespace lookup dictionary,以便将XML文件中的元素映射到ObjectifiedElement
的子类。现在,我想向这些类的实例添加一些数据。但是由于ObjectifiedElement
的工作方式,添加属性会导致元素被添加到元素树中,这不是我想要的。更重要的是,这不适用于所有Python类型;例如,无法创建list
类型的属性。
这似乎可以通过继承ElementBase
来实现,但这意味着会失去ObjectifiedElement
提供的功能。你可以说我只需要ObjectifiedElement
的读取部分。我想我可以在我的子类中添加__getattr__
来模拟这个,但我希望还有另一种方法。
答案 0 :(得分:0)
我最终让__getattr__()
转发给了etree的find()
:
class SomewhatObjectifiedElement(etree.ElementBase):
nsmap = {'ns': 'http://www.my.org/namespace'}
def __getattr__(self, name):
return self.find('ns:' + name, self.nsmap)
这只会返回第一个元素,如果有多个匹配,不像ObjectifiedElement
的行为,但它足以满足我的应用程序(大多数情况下它只能是一个匹配,否则,我使用{{1} })。