如何在Python中继承ElementTree.Element类?

3 投票
1 回答
870 浏览
提问于 2025-04-17 21:15

我想定义一个叫做 NewElement 的类,这个类是从 ElementTree.Element 继承来的。我的目标是给它添加一些额外的方法,比如 foo1() 和 foo2()。

定义 NewElement 类: import xml.etree.ElementTree as ET

class NewElement(ET.Element):
    def __init__(self):
        # Q1: how to init ET.Element? refer to ET's refer guide - http://docs.python.org/2/library/xml.etree.elementtree.html#xml.etree.ElementTree.SubElement
        pass
    def foo1(self):
        # do something on Element
        return self
    def foo2(self):
        # do something else on Element
        return self

我想这样使用 NewElement:

a_element = ET.fromstring(xmlstring)    # Q2: how to generate a NewElement object instead of ET.Element one
a_element.foo1().foo2()     # this is my goal to easier use foo1, foo2 functions

这里有几个问题

问题1 - 如何初始化 NewElement 的父类?ET 的参考指南说 ET.Element 可以被初始化,但似乎只能初始化元素本身,而没有子元素。

问题2 - 其他 ET 的类或函数返回的是 Element,但我希望返回 NewElement。我需要把所有的都改成 NewElement 吗?

我这样做是否正确?还是应该使用多重继承?或者使用混入?怎么做呢?...

谢谢你的宝贵意见。

1 个回答

0

这样做其实没必要。只需要把 foo1foo2 这两个函数定义为模块级别的函数,也就是说它们可以在模块的任何地方被调用。然后让这两个函数接受 Element 的实例,并返回这些实例就可以了。

foo2(foo1(a_element))

撰写回答