การใช้งาน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: object
โจอาคิมชี้ให้เห็นว่าการเป็นตัวอย่างใหม่สไตล์ชั้นจะไม่เทียบเท่ากับการเป็น ฉันอ่านตรงกันข้ามหลายครั้งด้วยเหตุนี้ความสับสนของฉัน (ตัวอย่างของการทดสอบคลาสอินสแตนซ์สไตล์ใหม่ตามobject
การทดสอบอินสแตนซ์: https://stackoverflow.com/revisions/2655651/3 )
super()
งานได้กับคลาสสไตล์ใหม่ (และวัตถุ) นั้นมีการกล่าวถึงในเอกสาร HTML ( docs.python.org/library/functions.html#super )
super.__doc__
ไม่พูดถึงสไตล์เก่ากับรูปแบบใหม่!