2011-12-17 12 views
0

XMLファイルの要素をサブクラスObjectifiedElementにマップするために、カスタムnamespace lookup dictionaryを設定しました。今、これらのクラスのインスタンスにいくつかのデータを追加したいと思います。しかし、方法がObjectifiedElementのために、属性を追加すると、要素ツリーに追加されますが、これは私が望むものではありません。もっと重要なことは、これはすべてのPython型では機能しません。たとえば、listタイプの属性を作成することはできません。ObjectifiedElementインスタンスに任意のデータを追加することはできますか?

ElementBaseをサブクラス化することによってこれが可能であると思われますが、それはObjectifiedElementによって提供される機能を失うことを意味します。あなたはの読み取り部分ObjectifiedElementのものであると言うことができます。私はこれをシミュレートするために私のサブクラスに__getattr__を追加することができますが、私は別の方法があることを期待していました。

答えて

0

私はetreeのfind()に単純に転送__getattr__()を持つことになった:

class SomewhatObjectifiedElement(etree.ElementBase): 
    nsmap = {'ns': 'http://www.my.org/namespace'} 

    def __getattr__(self, name): 
     return self.find('ns:' + name, self.nsmap) 

ほとんどが(いくつかのマッチングがある場合にのみObjectifiedElementの振る舞いとは異なり、最初の要素を返しますが、それは自分のアプリケーションで十分それは1つだけの一致にすることができます、そうでなければ、私はfindall()を使用します)。

関連する問題