这是我导入 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 对象的根时,事情变得令人困惑,例如将某些内容附加到 Foo ElementTree 的根:
root = self.getroot()
root.append(something)
这会产生此错误:
AttributeError: getroot
如何从 Foo 中正确调用 getroot()?
为什么 self.getroot() 不起作用,但 self.write() 起作用?
我从 ElementTree 对象继承的方式有什么问题吗?
我是否在不知不觉中遇到了一个重要的面向对象的概念障碍?