为什么Python';s lxml.etree.SubElement类方法不是实例方法?
为了向现有元素添加新的子元素,我必须调用一个类方法,并将父元素作为参数。我希望子元素的创建是即将成为父元素的实例方法,子元素(来自元素构造函数)是唯一的形式参数 实际:为什么Python';s lxml.etree.SubElement类方法不是实例方法?,python,lxml,Python,Lxml,为了向现有元素添加新的子元素,我必须调用一个类方法,并将父元素作为参数。我希望子元素的创建是即将成为父元素的实例方法,子元素(来自元素构造函数)是唯一的形式参数 实际: #!/usr/bin/python from lxml import etree root = etree.Element("parent") childNode = etree.SubElement(root, "child") 预期的(想象的): 这是lxml设计者的决定,还是lxml设计的其他部分施加的约束,或者“更具P
#!/usr/bin/python
from lxml import etree
root = etree.Element("parent")
childNode = etree.SubElement(root, "child")
预期的(想象的):
这是lxml设计者的决定,还是lxml设计的其他部分施加的约束,或者“更具Pythonic性”,或者什么?您可以这样做,但这样做的方法称为
附加
,而不是添加子元素
:
childNode = root.append(etree.Element("child"))
该公司表示,“这是如此普遍,有一种更短、更有效的方法可以做到这一点:子元素工厂”。然而,它给出的使用子元素
的示例实际上比使用附加
的示例略长,并且它没有解释它如何更有效,所以我承认我对它为什么这样说感到困惑。您可以使用您更喜欢的任何语法
看起来真正较短的方法应该是一种方法,它允许您按元素名称进行追加,而不是手动创建元素对象(例如,
root.addChild(“child”)
)。我不知道为什么没有这样的方法,但我相信其他一些XML库也有类似的方法。子元素
是一个工厂,而不是一个类方法:看看我是否看到类似于root.addChild(“child”)
的东西,我想它是在用child
@icktoofay:好吧,它可以被称为.addChildNode
或.addSubElement
,正如OP建议的那样。谢谢您的回答。AFICT,本教程声称它更短的原因是append不会返回附加子项的值,因此您需要创建子项然后再附加它,或者在创建子项后获取对它的引用。不管怎样,这都是两种说法<代码>>>nfd
>child
>
childNode = root.append(etree.Element("child"))