我想从Element
扩展ElementTree
和xml.etree
类的功能,并将其与xml.etree.ElementTree.parse()
一起使用。
经过几次尝试后,我设法为这个问题创建了一个解决方案,但我想知道是否有更好的解决方案,或者这个解决方案是否存在隐患。
FooElementTree.py
import xml.etree
from xml.etree.ElementTree import Element
from xml.etree.ElementTree import ElementTree
class FooElement(Element):
def __repr__(self):
return "<FooElement %s at 0x%x>" % (repr(self.tag), id(self))
class FooElementTree(ElementTree):
pass
xml.etree.ElementTree.Element = FooElement
xml.etree.ElementTree.ElementTree = FooElementTree
from xml.etree.ElementTree import parse
用法:
>>> import FooElementTree
>>> e = FooElementTree.parse('xml.cfg')
>>> e
<FooElementTree.FooElementTree object at 0x023AB650>
>>> r = e.getroot()
>>> r
<FooElement 'configuration' at 0x23c5470>
答案 0 :(得分:0)
这就是热补丁的方式。但请注意,必须在导入任何其他模块(或子模块)之前应用补丁,该模块也使用ElementTree。