বেস (সুপার) ক্লাসটি কীভাবে শুরু করব?
class SuperClass(object):
def __init__(self, x):
self.x = x
class SubClass(SuperClass):
def __init__(self, y):
self.y = y
super
পদ্ধতি সমাধানের ক্রমে আপনি পরবর্তী পদ্ধতিটি (সীমাবদ্ধ পদ্ধতি হিসাবে) পান তা নিশ্চিত করতে একটি অবজেক্ট ব্যবহার করুন । পাইথন 2 এ, আপনাকে self
বাউন্ড __init__
পদ্ধতিটি দেখার জন্য শ্রেণীর নাম এবং সুপার পাস করতে হবে :
class SubClass(SuperClass):
def __init__(self, y):
super(SubClass, self).__init__('x')
self.y = y
পাইথন 3-তে একটি সামান্য যাদু রয়েছে যা যুক্তিগুলিকে super
অপ্রয়োজনীয় করে তোলে - এবং পার্শ্ব সুবিধা হিসাবে এটি আরও দ্রুত কাজ করে:
class SubClass(SuperClass):
def __init__(self, y):
super().__init__('x')
self.y = y
নীচের মত পিতামাতাকে হার্ডকোডিং আপনাকে সমবায় একাধিক উত্তরাধিকার ব্যবহার থেকে বাধা দেয়:
class SubClass(SuperClass):
def __init__(self, y):
SuperClass.__init__(self, 'x') # don't do this
self.y = y
দ্রষ্টব্য যে __init__
কেবল ফিরে আসতে পারেNone
- এটি উদ্দেশ্য জায়গায় স্থান পরিবর্তন করার উদ্দেশ্যে।
কিছু __new__
উদাহরণগুলি আরম্ভ করার জন্য আরও একটি উপায় রয়েছে - এবং পাইথনের অপরিবর্তনীয় ধরণের সাবক্লাসগুলির জন্য এটি একমাত্র উপায়। যদি আপনি উপশ্রেণী করতে চান সুতরাং এটি এর প্রয়োজন str
বা tuple
বা অন্য অপরিবর্তনীয় অবজেক্ট।
আপনি সম্ভবত এটি একটি শ্রেণিবদ্ধ বলে মনে করতে পারেন কারণ এটি একটি অন্তর্নিহিত শ্রেণি আর্গুমেন্ট পায়। তবে এটি আসলে একটি অচলিত ধারণা । আপনাকে কল করার প্রয়োজন তাই __new__
সঙ্গেcls
স্পষ্টভাবে।
আমরা সাধারণত উদাহরণটি থেকে ফিরে আসি __new__
, সুতরাং আপনি যদি তা করেন তবে আপনাকে আপনার বেস শ্রেণীর __new__
মাধ্যমে আপনার বেসের মাধ্যমেও কল করতে হবে super
। সুতরাং আপনি যদি উভয় পদ্ধতি ব্যবহার করেন:
class SuperClass(object):
def __new__(cls, x):
return super(SuperClass, cls).__new__(cls)
def __init__(self, x):
self.x = x
class SubClass(object):
def __new__(cls, y):
return super(SubClass, cls).__new__(cls)
def __init__(self, y):
self.y = y
super(SubClass, self).__init__('x')
পাইথন 3 __new__
স্ট্যাটিক পদ্ধতি হওয়ার কারণে সুপার কলগুলির অদ্ভুততার কিছুটা অংশ অতিক্রম করে, তবে আপনাকে এখনও cls
অ-আবদ্ধ __new__
পদ্ধতিতে যেতে হবে:
class SuperClass(object):
def __new__(cls, x):
return super().__new__(cls)
def __init__(self, x):
self.x = x
class SubClass(object):
def __new__(cls, y):
return super().__new__(cls)
def __init__(self, y):
self.y = y
super().__init__('x')