Aşağıdaki kullanım super()
bir TypeError oluşturur: neden?
>>> 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'da da benzer bir soru var: Python super (), TypeError öğesini yükseltir ; burada hata, kullanıcı sınıfının yeni stil sınıfı olmaması gerçeğiyle açıklanır. Bununla birlikte, yukarıdaki sınıf, aşağıdakilerden miras aldığı için yeni bir sınıftır object
:
>>> isinstance(HTMLParser(), object)
True
Neyi kaçırıyorum? Burada nasıl kullanabilirim super()
?
HTMLParser.__init__(self)
Bunun yerine kullanmak super(TextParser, self).__init__()
işe yarayacaktır, ancak TypeError'ı anlamak istiyorum.
Not: Joachim, yeni bir tarz sınıf örneği olmanın bir object
. Aksini defalarca okudum, bu yüzden karışıklığım (örnek testine dayanan yeni stil sınıfı örnek test object
örneği: https://stackoverflow.com/revisions/2655651/3 ).
super()
Yalnızca yeni stil sınıfları (ve nesneler) için çalıştığı gerçeği HTML belgesinde ( docs.python.org/library/functions.html#super ) belirtilmiştir.
super.__doc__
eski vs yeni stil hakkında bir şey söylemiyor!