Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Python';s lxml.etree.SubElement类方法不是实例方法?_Python_Lxml - Fatal编程技术网

为什么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"))