次の使用はsuper()
TypeErrorを発生させます:なぜですか?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
StackOverflowにも同様の質問があります。Pythonのsuper()がTypeErrorを発生させます。エラーは、ユーザークラスが新しいスタイルのクラスではないという事実によって説明されます。ただし、上記のクラスは以下から継承するため、新しいスタイルのクラスobject
です。
>>> isinstance(HTMLParser(), object)
True
何が欠けていますか?どうすればsuper()
ここで使用できますか?
のHTMLParser.__init__(self)
代わりにsuper(TextParser, self).__init__()
を使用すると機能しますが、TypeErrorを理解したいと思います。
PS:Joachimは、新しいスタイルのクラスのインスタンスであることはであることと同等ではないと指摘しましたobject
。私は何度も反対を読んでいるため、混乱しています(インスタンステストに基づく新しいスタイルのクラスインスタンステストのobject
例:https : //stackoverflow.com/revisions/2655651/3)。
super()
新しいスタイルのクラス(およびオブジェクト)でのみ機能するという事実は、HTMLドキュメント(docs.python.org/library/functions.html#super)で言及されています。
super.__doc__
が古いスタイルと新しいスタイルについて何も触れていないのはなぜでしょうか。