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 object
kiể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!