ElementTree をインポートする方法は次のとおりです。
try:
import xml.etree.cElementTree as ET
except ImportError:
import xml.etree.ElementTree as ET
これが私のクラスのスニペットです:
class Foo(ET.ElementTree):
def __init__(self, *args):
if args[0] == "file":
# populate from xml file
self = load_xml(self, *args[1:])
elif args[0] == "user_input":
# populate from user_input
self = load_from_user_input(self, *args[1:])
else:
raise ValueError("Error initializing Foo: Invalid argument")
def save_xml(self, file_name):
self.write(file_name + FOO_EXTENSION, xml_declaration=True, encoding='utf-8', method='xml')
initと save_xml は期待どおりに機能します。混乱を招くのは、Foo ElementTree のルートに何かを追加するなど、メソッドで Foo オブジェクトのルートを使用する必要がある場合です。
root = self.getroot()
root.append(something)
これにより、次のエラーが発生します。
AttributeError: getroot
Foo 内から getroot() を正しく呼び出すにはどうすればよいですか?
self.getroot() が機能しないのに、self.write() が機能するのはなぜですか?
ElementTree オブジェクトから継承した方法に何か問題がありますか?
オブジェクト指向の重要な概念上のハードルに直面しているのでしょうか?