从Python中导入的包中重写子类方法

时间:2018-02-13 19:38:26

标签: python inheritance override

我无法弄清楚如何覆盖继承子类中的方法。我使用的是html2text包,它有一个名为HTML2Text的子类,可以解决繁重的问题。我按如下方式创建一个新类:

import html2text
class MyHTML2Text(html2text.HTML2Text):
    def handle_tag(self, tag, attrs, start):
        ...

parser = MyHTML2Text()
parser.handle(hml)

问题在于,当导入顶级类html2text时,它会初始化HTML2Text所需的一系列子函数,并且它们对新类不可用,所以每当新类调用这些函数时不在那里。

我知道这一定很简单,但是在这样的子类中覆盖方法并在正确的命名空间中保留所有顶级初始化内容的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

  

我只想覆盖那个特定子类中的那个。

您可以明确覆盖功能。

#!/usr/bin/env python
# coding: utf-8
import html2text

# store original function for any case
_orig_handle_tag = html2text.HTML2Text.handle_tag


# define a new functiont
def handle_tag(self, tag, attrs, start):
    print('OVERRIDEN')
    print(tag, attrs, start)


# override
html2text.HTML2Text.handle_tag = handle_tag


# test
conv = html2text.HTML2Text()
conv.handle_tag(tag='#python', attrs='some attribute', start=0)

# OUTPUT:
# -------
# OVERRIDEN
# ('#python', 'some attribute', 0)

# restore original function
html2text.HTML2Text.handle_tag = _orig_handle_tag