私は最新の 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 calling the metaclass bases a new-style class can't have only classic bases のようなSOの投稿を見つけて、私はすでに答えをたくさんグーグルで検索しました。ただし、その特定の投稿は、私が作成できる新しいスタイルのクラスを扱っており、私の特定のケース (つまり、Python stdlib のクラスから継承する抽象クラス) を説明する他のソースは見つかりませんでした。
私の疑惑は、HTMLParserPython 2.7 が提供するクラス自体が新しいスタイルのクラスではないということです。これが問題である場合、それについて何かできることはありますか? モジュールは、abcこの種の構成を実現する手段を提供しますか?
ありがとう、
カレブ