কেন কনস্ট্রাক্টরকে সত্যই "কনস্ট্রাক্টর" বলা হয়?
কনস্ট্রাক্টর (নামযুক্ত __new__) শ্রেণীর একটি নতুন উদাহরণ তৈরি করে এবং প্রদান করে। তাই C.__new__বর্গ পদ্ধতি কন্সট্রাকটর বর্গ সি জন্য
C.__init__উদাহরণ হিসেবে বলা যায় পদ্ধতি একটি নির্দিষ্ট উদাহরণস্বরূপ উপর বলা হয়, পরে এটি তৈরি করা হয়, কলার ফিরে প্রেরণ করা হচ্ছে আগেই ইনিশিয়ালাইজ। সুতরাং সেই পদ্ধতিটি সি এর নতুন দৃষ্টান্তের সূচনাকারী is
তারা ক্লাসে পদ্ধতি থেকে কীভাবে আলাদা?
হিসাবে বিবৃত কর্মকর্তা ডকুমেন্টেশন __init__ হয় পরে উদাহরণস্বরূপ তৈরি করা হয় নামক । অন্যান্য পদ্ধতিগুলি এই চিকিত্সা গ্রহণ করে না।
তাদের উদ্দেশ্য কী?
কনস্ট্রাক্টরের উদ্দেশ্যটি C.__new__হ'ল একটি নতুন Cউদাহরণ নির্মাণের সময় কাস্টম আচরণকে সংজ্ঞায়িত করা ।
ইনিশিয়ালাইজারটির উদ্দেশ্য C.__init__হ'ল Cএটি তৈরির পরে প্রতিটি ইভেন্টের কাস্টম আরম্ভের সংজ্ঞা দেওয়া ।
উদাহরণস্বরূপ পাইথন আপনাকে এটি করতে দেয়:
class Test(object):
pass
t = Test()
t.x = 10 # here you're building your object t
print t.x
তবে আপনি যদি প্রতিটি সংস্করণের জন্য 10 এর সমান Testএকটি গুণাবলী রাখতে চান তবে আপনি xসেই কোডটি ভিতরে রাখতে পারেন __init__:
class Test(object):
def __init__(self):
self.x = 10
t = Test()
print t.x
প্রতিটি উদাহরণ পদ্ধতি (কোনও শ্রেণীর নির্দিষ্ট উদাহরণের জন্য ডাকা একটি পদ্ধতি) উদাহরণটিকে তার প্রথম যুক্তি হিসাবে গ্রহণ করে। সেই যুক্তিটির নামকরণ করা হয়েছে প্রচলিতভাবে self।
ক্লাসের পদ্ধতিগুলি যেমন কনস্ট্রাক্টর __new__পরিবর্তে ক্লাসটি তাদের প্রথম যুক্তি হিসাবে গ্রহণ করে।
এখন, আপনি যদি গুনটির জন্য কাস্টম মান চান তবে আপনাকে যা xকরতে হবে তা হল মানটিকে যুক্তি হিসাবে পাস করা __init__:
class Test(object):
def __init__(self, x):
self.x = x
t = Test(10)
print t.x
z = Test(20)
print t.x
আমি আশা করি এটি আপনাকে কিছু সন্দেহ দূর করতে সহায়তা করবে এবং যেহেতু আপনি ইতিমধ্যে অন্যান্য প্রশ্নের ভাল উত্তর পেয়েছেন আমি এখানেই থামব :)
__init__একটি প্রাথমিককরণকারী । পাইথন কনস্ট্রাক্টর হলেন__new__। পাইথন স্বয়ংক্রিয় দ্বি-পর্বের সূচনা ব্যবহার করে -__new__একটি বৈধ তবে (সাধারণত) অব্যবহৃত বস্তু দেয় (boolএকটি পাল্টা উদাহরণের জন্য দেখুন), যা তারপরে__init__স্বয়ংক্রিয়ভাবে এটিকে ডাকবে। এটি আংশিকভাবে নির্মিত বস্তুর সাথে সি ++ এর মতো ভাষাগুলির সমস্যাগুলি এড়ায় - আপনার পাইথনে কখনও নেই (যদিও এটি আংশিক-প্রাথমিককরণ হতে পারে)। আপনার প্রায়শই কখনও__new__এবং__init__ক্লাসে উভয়ই ওভাররাইড করার প্রয়োজন হবে না ।