我一直在我最新的 Python 2 项目 (2.7.12) 中使用 HTML 解析器。我想创建一个基类,我的所有 HTML 解析器子类都可以从该基类继承。但是,我也希望这个基类(继承自HTMLParser
)成为一个抽象基类。
#!/usr/bin/env python2
import abc
from HTMLParser import HTMLParser
class MyParser(HTMLParser):
__metaclass__ = abc.ABCMeta
parser = MyParser()
但是,当我尝试运行此文件时,我收到以下错误(带有堆栈跟踪):
Traceback (most recent call last):
File "./sandbox.py", line 7, in <module>
class MyParser(HTMLParser):
File "/usr/local/Cellar/python/2.7.12/Frameworks/Python.framework/Versions/2.7/lib/python2.7/abc.py", line 87, in __new__
cls = super(ABCMeta, mcls).__new__(mcls, name, bases, namespace)
TypeError: Error when calling the metaclass bases
a new-style class can't have only classic bases
我已经在谷歌上搜索了很多答案,找到了诸如TypeError: Error when call the metaclass bases a new-style class can't have only classic bases这样的帖子。但是,该特定帖子涉及我可以创建的新型类,并且我还没有找到描述我的特定情况的任何其他来源(即从 Python stdlib 中的类继承的抽象类)。
我怀疑HTMLParser
Python 2.7 提供的类本身并不是一个新式的类。如果这是问题所在,我能做些什么吗?该模块是否abc
提供了实现这种配置的任何方法?
谢谢,
迦勒