Смущает использование класса или функции: написание файлов XML с использованием lxml и Python - PullRequest
5 голосов
/ 23 мая 2010

Мне нужно написать XML-файлы, используя lxml и Python.

Однако я не могу понять, использовать ли class для этого или функцию. Дело в том, что я впервые разрабатываю правильное программное обеспечение и решаю, где и почему использовать class, до сих пор кажется загадочным.

Я проиллюстрирую свою точку зрения.

Например, рассмотрим следующий код, основанный на функции, который я написал для добавления подэлемента в корень etree.

from lxml import etree

root = etree.Element('document')

def createSubElement(text, tagText = ""):
    etree.SubElement(root, text)
    # How do I do this: element.text = tagText

createSubElement('firstChild')
createSubElement('SecondChild')

Как и ожидалось, результат этого будет:

<document>
  <firstChild/>
  <SecondChild/>
</document>

Однако, как вы можете заметить комментарий, я понятия не имею, как установить текстовую переменную, используя этот подход.

Является ли использование class единственным способом решения этой проблемы? И если да, можете ли вы дать мне несколько советов о том, как этого добиться?

1 Ответ

3 голосов
/ 23 мая 2010

работает следующий код:

def createSubElement(text, tagText = ""):
    elem = etree.SubElement(root, text)
    elem.text = tagText

createSubElement('firstChild', 'first one')
createSubElement('SecondChild', 'second one')

print etree.tostring(root)

Использование класса, а не функции в основном связано с сохранением состояния в экземплярах класса (в очень немногих случаях использования класс будет иметь смысл, если не требуется сохранение состояния), в котором нет ничего чтобы решить вашу проблему - как показывает код, ваша проблема заключалась в том, что вы просто не связывали какое-либо имя с элементом, возвращаемым из вызова SubElement, и, следовательно, конечно, вы не смогли далее манипулировать этим элементом (например, путем установки его атрибут text) в остальной части вашей функции.

...