Việc sử dụng sau đây super()làm tăng TypeError: tại sao?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
Có một câu hỏi tương tự trên StackOverflow: Python super () làm tăng TypeError , trong đó lỗi được giải thích bởi thực tế là lớp người dùng không phải là một lớp kiểu mới. Tuy nhiên, lớp ở trên là một lớp kiểu mới, vì nó kế thừa từ object:
>>> isinstance(HTMLParser(), object)
True
Tôi đang thiếu gì? Làm thế nào tôi có thể sử dụng super(), ở đây?
Sử dụng HTMLParser.__init__(self)thay vì super(TextParser, self).__init__()sẽ hoạt động, nhưng tôi muốn hiểu TypeError.
PS: Joachim đã chỉ ra rằng việc là một thể hiện của lớp kiểu mới không tương đương với việc là một object. Tôi đã đọc ngược lại nhiều lần, do đó tôi nhầm lẫn (ví dụ về kiểm tra cá thể lớp kiểu mới dựa trên objectkiểm tra cá thể: https://stackoverflow.com/revutions/2655651/3 ).
super()chỉ hoạt động cho các lớp (và đối tượng) kiểu mới được đề cập trong tài liệu HTML ( docs.python.org/l Library / fiances.html # supup ).
super.__doc__không đề cập bất cứ điều gì về phong cách cũ và mới!