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

3

我试图定义一个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

问题如下:

问题一 - 如何初始化NewElement的父元素?参考指南中提到ET.Element可以初始化,但似乎只有元素本身没有子元素。

问题二 - 其他ET的类/函数返回的是Element,但我期望得到NewElement。我需要将它们全部更改吗?

我是否在正确的方向上实现了我的目标?还是应该使用多重继承?或者使用mixin?如何操作?...

非常感谢您提供的极好建议。

1个回答

0

不必那样做。只需将foo1foo2定义为模块级别函数,接受Element的实例并返回这些实例:

foo2(foo1(a_element))

正如您所知,aNewElement.foo1().foo2() 比 foo2(foo1(a_element)) 更好。这是一种整洁的用法 - aNewElement.foo1(argv1, ....).foo2(argvx....)。现在我正在寻找 mixin 来解决这个问题。 - MK at Soho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接