Можно ли добавить произвольные данные в экземпляр ObjecifiedElement? - PullRequest
0 голосов
/ 17 декабря 2011

Я настроил пользовательский словарь поиска пространства имен , чтобы сопоставить элементы в файлах XML с подклассами ObjectifiedElement. Теперь я хочу добавить некоторые данные в экземпляры этих классов. Но из-за того, как работает ObjectifiedElement, добавление атрибута приведет к добавлению элемента в дерево элементов, а это не то, что мне нужно. Что еще более важно, это не работает для всех типов Python; например, невозможно создать атрибут типа list.

Это представляется возможным, если вместо этого создать подкласс ElementBase, но это будет означать потерю функций, предоставляемых ObjectifiedElement. Можно сказать, что мне нужна только прочитанная часть из ObjectifiedElement. Я полагаю, что могу добавить __getattr__ к своим подклассам, чтобы смоделировать это, но я надеялся, что был другой способ.

1 Ответ

0 голосов
/ 11 января 2012

У меня получилось __getattr__() просто переслать на find() Этри:

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

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

Это вернет первый элемент, только если есть несколько соответствий, в отличие от поведения ObjectifiedElement, но этого достаточно для моего приложения (в основном это может быть только одно совпадение, в противном случае я использую findall()).

...