নিম্নলিখিত ব্যবহারের super()
ফলে একটি টাইপআরার উত্থাপিত হয়: কেন?
>>> from HTMLParser import HTMLParser
>>> class TextParser(HTMLParser):
... def __init__(self):
... super(TextParser, self).__init__()
... self.all_data = []
...
>>> TextParser()
(...)
TypeError: must be type, not classobj
স্ট্যাকওভারফ্লোতে একই ধরণের প্রশ্ন রয়েছে: পাইথন সুপার () টাইপ ইরার উত্থাপন করে , যেখানে ত্রুটিটি ব্যাখ্যা করা হয়েছে যে ব্যবহারকারী শ্রেণিটি কোনও নতুন-শৈল শ্রেণি নয়। তবে উপরের ক্লাসটি একটি নতুন ধাঁচের শ্রেণি, এটি উত্তরাধিকার সূত্রে প্রাপ্ত object
:
>>> isinstance(HTMLParser(), object)
True
আমি কী মিস করছি? আমি super()
এখানে কীভাবে ব্যবহার করতে পারি ?
এর HTMLParser.__init__(self)
পরিবর্তে ব্যবহার করা কার্যকর super(TextParser, self).__init__()
হবে তবে আমি টাইপরর বুঝতে চাই।
পিএস: জোয়াকিম উল্লেখ করেছেন যে একটি নতুন-স্টাইলের-শ্রেণীর উদাহরণ হওয়া সমান নয় object
। আমি বিপরীতে বহুবার পড়েছি, সুতরাং আমার বিভ্রান্তি (উদাহরণ পরীক্ষার উপর ভিত্তি করে নতুন ধাঁচের শ্রেণির উদাহরণ পরীক্ষার object
উদাহরণ: https://stackoverflow.com/revisions/2655651/3 )।
super()
শুধুমাত্র নতুন স্টাইলের শ্রেণীর (এবং বস্তু) জন্য কাজ করে এইচটিএমএল ডক (উল্লেখ করা হয় docs.python.org/library/functions.html#super )।
super.__doc__
পুরানো বনাম নতুন স্টাইল সম্পর্কে কিছু উল্লেখ করা হয়নি!