জাভা এবং C ++ প্রয়োজন যে একটি বেস বর্গ কন্সট্রাকটর মেমরির লেআউট কারণ বলা হয়।
আপনার যদি BaseClass
কোনও সদস্যের সাথে ক্লাস থাকে field1
এবং আপনি একটি নতুন শ্রেণি তৈরি করেন SubClass
যা কোনও সদস্যকে যুক্ত করে field2
, তবে একটি উদাহরণে SubClass
স্থান থাকেfield1
এবং field2
। আপনার BaseClass
পূরণের জন্য একজন কনস্ট্রাক্টর প্রয়োজন field1
, যদি না আপনি সমস্ত উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসগুলির BaseClass
নিজস্ব নির্মাণকারীগুলিতে পুনরায় আরম্ভ করার প্রয়োজন হয়। এবং যদি field1
ব্যক্তিগত হয়, তবে উত্তরাধিকার সূত্রে প্রাপ্ত ক্লাসগুলি আরম্ভ করতে পারে নাfield1
।
পাইথন জাভা বা সি ++ নয়। সমস্ত ব্যবহারকারী-সংজ্ঞায়িত শ্রেণীর সমস্ত দৃষ্টান্তের একই 'আকার' থাকে। এগুলি মূলত কেবল অভিধান যা বৈশিষ্ট্যগুলি .োকানো যেতে পারে। কোনও সূচনা হওয়ার আগে, সমস্ত ব্যবহারকারী-সংজ্ঞায়িত শ্রেণীর সমস্ত উদাহরণ প্রায় একই রকম ; এগুলি কেবলমাত্র এমন বৈশিষ্ট্যগুলি সংরক্ষণ করার জন্য জায়গা যা এখনও কোনও সঞ্চয় করে না।
সুতরাং এটি পাইথন সাবক্লাসের জন্য তার বেস শ্রেণীর কনস্ট্রাক্টরকে কল না করার জন্য এটি সঠিক ধারণা দেয়। এটি চাইলে কেবল এটি বৈশিষ্ট্যগুলি যুক্ত করতে পারে। অনুক্রমের প্রতিটি শ্রেণীর জন্য প্রদত্ত সংখ্যার ক্ষেত্রের জন্য কোনও স্থান সংরক্ষিত নেই BaseClass
এবং কোনও SubClass
পদ্ধতি থেকে কোড দ্বারা সংযুক্ত একটি গুণাবলী এবং কোনও পদ্ধতি থেকে কোড দ্বারা সংযুক্ত একটি গুণীর মধ্যে পার্থক্য নেই ।
যদি, সাধারণ হিসাবে, SubClass
আসলে BaseClass
এটির নিজস্ব কাস্টমাইজেশনটি চালানোর আগে তার সমস্ত আক্রমণকারী সেট আপ করতে চায় তবে হ্যাঁ আপনি কেবল কল করতে পারেন BaseClass.__init__()
(বা ব্যবহার করুন super
, তবে এটি জটিল এবং কখনও কখনও এর নিজস্ব সমস্যা আছে)। তবে আপনার দরকার নেই। এবং আপনি এটি আগে বা পরে বা বিভিন্ন যুক্তি দিয়ে করতে পারেন। জাহান্নাম, আপনি চাইলে আপনি BaseClass.__init__
অন্য কোনও পদ্ধতি থেকে পুরোপুরি কল করতে পারেন __init__
; সম্ভবত আপনার কিছু উদ্ভট অলস সূচনা চলছে।
পাইথন জিনিসগুলি সহজ রেখে এই নমনীয়তা অর্জন করে। আপনি __init__
অ্যাট্রিবিউট সেট করে এমন একটি পদ্ধতি লিখে অবজেক্টের সূচনা করেন self
। এটাই. এটি ঠিক কোনও পদ্ধতির মতো আচরণ করে, কারণ এটি হ'ল একটি পদ্ধতি। প্রথমে যে কাজগুলি করা হবে সেগুলি সম্পর্কে অন্য কোনও অদ্ভুত এবং অনিচ্ছাকৃত নিয়ম নেই, বা অন্য জিনিস না করলে জিনিসগুলি স্বয়ংক্রিয়ভাবে ঘটবে। প্রাথমিক বৈশিষ্ট্য মানগুলি সেট করার জন্য অবজেক্ট ইনিশিয়ালাইজেশন চলাকালীন এটি হুক হওয়া কেবলমাত্র তার উদ্দেশ্যটির প্রয়োজন। আপনি যদি এটি অন্য কিছু করতে চান তবে আপনি তা স্পষ্টভাবে আপনার কোডটিতে লিখুন।
__init__
পদ্ধতিটি উত্তরাধিকারী করার জন্য আপনি একটি সজ্জনকারী লিখতে পারেন এবং এমনকি স্বয়ংক্রিয়ভাবে সাবক্লাসগুলির জন্য অনুসন্ধান করতে এবং সেগুলি সজ্জিত করতে পারেন।