Penggunaan berikut ini super()
memunculkan TypeError: mengapa?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
Ada pertanyaan serupa di StackOverflow: Python super () memunculkan TypeError , di mana kesalahannya dijelaskan oleh fakta bahwa kelas pengguna bukan kelas gaya baru. Namun, kelas di atas adalah kelas gaya baru, karena mewarisi dari object
:
>>> isinstance(HTMLParser(), object)
True
Apa yang saya lewatkan? Bagaimana saya bisa menggunakan super()
, di sini?
Menggunakan HTMLParser.__init__(self)
bukannya super(TextParser, self).__init__()
akan bekerja, tapi saya ingin memahami TypeError.
PS: Joachim menunjukkan bahwa menjadi contoh kelas gaya baru tidak setara dengan menjadi object
. Saya membaca kebalikannya berkali-kali, karenanya kebingungan saya (contoh uji contoh kelas gaya baru berdasarkan object
uji contoh: https://stackoverflow.com/revisions/2655651/3 ).
super()
hanya berfungsi untuk kelas gaya baru (dan objek) disebutkan dalam dokumen HTML ( docs.python.org/library/functions.html#super ).
super.__doc__
tidak menyebutkan apa pun tentang gaya lama vs baru!