2016-09-11 5 views
1

ElementElementTreeのクラスの機能をxml.etreeから拡張してxml.etree.ElementTree.parse()と使用したいと思います。Elementと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も使用します。