【问题标题】:How to inherit ElementTree.Element class in python?如何在python中继承ElementTree.Element类?
【发布时间】:2014-04-10 05:06:46
【问题描述】:

我尝试定义一个继承 ElementTree.Element 的 NewElement 类。目标是添加更多方法,例如foo1(), foo2(), 给它。

定义 NewElement 类: 将 xml.etree.ElementTree 导入为 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

问题是

Q1 -如何初始化NewElement的父级? ET 的参考指南说 ET.Element 可以初始化,但似乎只有元素本身没有子元素。

Q2 - 其他 ET 的类/函数返回 Element,但我期待 NewElement。我需要全部更改吗?

我是否朝着正确的方向实现目标?还是改用多重继承?还是使用mixin?如何? ...

感谢您的出色投入。

【问题讨论】:

    标签: python inheritance elementtree


    【解决方案1】:

    没有必要这样做。只需让foo1 foo2 模块级 函数接受Element 的实例并返回实例:

    foo2(foo1(a_element))
    

    【讨论】:

    • 谢谢。如你所知,aNewElement.foo1().foo2() 感觉比 foo2(foo1(a_element) 好。它的用法很巧妙 - aNewElement.foo1(argv1, ....).foo2(argvx....)。现在我正在寻找 mixin 来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多