2016-09-11 51 views
1

我想扩展ElementElementTree类别xml.etree的功能,并将它们与xml.etree.ElementTree.parse()一起使用。元素和ElementTree的扩展功能

经过几次尝试,我已经设法为这个问题创建了一个解决方案,但是我想知道是否有更好的解决方案,或者这个解决方案是否存在任何隐患。

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

这是正路,热修补工程。但请注意,该补丁必须在导入任何其他模块(或子模块)之前应用,也使用ElementTree。