我想向来自lxml的html树添加一些功能。如何间接创建对象时创建子类
因此,我想添加一个类,使用super().__init__()
并添加额外的功能,例如为每个节点添加深度,为isLeafNode
添加布尔值,并实现view
方法。
这就是问题出现的地方,因为我可能会使用lxml.html.fromstring('<p>test</p>')
来初始化lxml类。
这是我走到这一步:
class Elhanced(lxml.etree._ElementTree):
def __init__(self, htmlString):
super().__init__()
self.x = 'useful'
self.tree = lxml.html.fromstring(htmlString) # Issue
def useful_function():
pass
不过,其实我是想的对象与附加功能增强 lxml的对象,而不是树通过self.tree
可访问,而其他属性可通过self
获取。
如何将功能添加到增强的lxml对象?
我想初始化是这样的:
el = Elhanced('<p>test</p>')
其中el
具有lxml
(如el.xpath
应该存在)的所有方法,以及el.useful_function()
和el.x
。
也许现在还没有更好的方法。
或许'super().__ init __()'没有达到你期望的效果;你可以使用'super(Elhanced,self)'来访问超类。例如,要调用'__init __()',你可以使用'super(Elhanced,self).__ init __()'。 – Quint
@Quintus在python3中,'super()'应该可以正常工作。这与OP的问题没有任何关系。 – deets
为什么你不使用包装类?或者如果它是一个你想添加的函数,只需从那里调用它:'useful_function(el,arg1,arg2)'。 – solarc