1

我想扩展ElementElementTree类的功能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>
4

1 回答 1

0

This is the way, hot patching works. But be aware, that the patch has to be applied before any other Module (or Submodule) is imported, that uses ElementTree, too.

于 2016-09-11T09:10:01.737 回答