Constructor and Self

__init__ ဆိုတာ? (The Auto-Setup Man)

__init__ (ရှေ့ရောနောက်ရော underscore နှစ်ခုစီ) ကို Constructor လို့ခေါ်တယ်။

သူ့ Vibe က: bro Object အသစ်တစ်ခု မွေး (create) လိုက်တာနဲ့... ငါ auto အလုပ်လုပ်မှာ။ bro ရဲ့ Object ကို setup (အသင့်ပြင်) လုပ်ပေးဖို့က ငါ့အလုပ်။

ဥပမာ: bro တို့ Person class ကနေ လူ အစစ် (Object) တစ်ယောက် မွေးတယ် ဆိုပါစို့။ p1 = Person("Aung Aung", 25)

အဲ့ဒီ Person(...) ဆိုပြီး ကွင်းစကွင်းပိတ် () ကို ခေါ် (call) လိုက်တဲ့ စက္ကန့်ပိုင်း မှာပဲ... Python က __init__ method ကို auto လှမ်းခေါ်ပြီး run ပေးတယ်။

သူ့အလုပ်: သူ့အလုပ်က Object အသစ်ကို မွေးကင်းစ မှာ လိုအပ်တဲ့ data တွေ တပ်ဆင်ပေးဖို့ပဲ။ လူ တစ်ယောက် မွေး လာရင် နာမည် (name) နဲ့ အသက် (age) auto ပါလာရမယ်လေ။ အဲ့ data တွေကို setup လုပ်ပေးတာ __init__ ပဲ။

Constructor Example
class Person: # The Constructor # Object မွေးတိုင်း auto run တယ် def __init__(self, name, age): print(f"DEBUG: __init__ အလုပ်လုပ်နေပြီ! {name} အတွက်...") # Data တွေ (Attributes) ကို setup လုပ်တယ် self.name = name self.age = age # Object မွေးကြည့်မယ် print("p1 ကို မွေးတော့မယ်...") p1 = Person("Aung Aung", 25) # ဒီမှာ __init__ auto run သွားပြီ print("p2 ကို မွေးတော့မယ်...") p2 = Person("Ma Mya", 30) # ဒီမှာ __init__ auto run သွားပြီ

Output က:

Output
p1 ကို မွေးတော့မယ်... DEBUG: __init__ အလုပ်လုပ်နေပြီ! Aung Aung အတွက်... p2 ကို မွေးတော့မယ်... DEBUG: __init__ အလုပ်လုပ်နေပြီ! Ma Mya အတွက်...
Okay? __init__ ကို ကိုယ်တိုင် ခေါ် (call) စရာ မလိုဘူး။ Object မွေး တာနဲ့ သူက auto run တယ်။

self ဆိုတာကြီးက? (The Me Vibe)

အရှေ့မှာ bro ဖတ်ခဲ့ရတဲ့တိုင်းပဲ။

အဓိပ္ပာယ်: self ဆိုတာ Object ကိုယ်တိုင် ကို ညွှန်းတာ။

Class ဆိုတာ ပုံစံခွက် (blueprint) ပဲလို့ ကျနော်တို့ ပြောခဲ့တယ်။ Person class ထဲမှာ __init__ ကို ရေးတုန်းက... ဘယ် လူ (Object) အစစ်မှ မရှိသေးဘူး။ ပုံစံ ပဲ ဆွဲနေတာ။

အဲ့ဒီ ပုံစံ ထဲမှာ... def __init__(self, name, age):

self က ဘာကို ဆိုလိုလဲ ဆိုတော့... ဟေ့ နောင်တစ်ချိန်မှာ... ငါ့ကို သုံးပြီး p1 ဆိုတဲ့ Object မွေး လာခဲ့ရင်... အဲ့ self နေရာမှာ p1 ကို အစားထိုးလိုက်။ ငါ့ကို သုံးပြီး p2 ဆိုတဲ့ Object မွေး လာခဲ့ရင်... အဲ့ self နေရာမှာ p2 ကို အစားထိုးလိုက်။

self ဆိုတာ ဒီ Object၊ ငါ (Me)၊ ငါ့ရဲ့ (My) လို့ ပြောတာ။

ကြည့်ရအောင်

p1 = Person("Aung Aung", 25) လို့ run လိုက်တဲ့အချိန်... __init__ auto run တယ်။ အဲ့အချိန်မှာ:

  • self က p1 ဖြစ်သွားတယ်။
  • name က "Aung Aung" ဖြစ်သွားတယ်။
  • age က 25 ဖြစ်သွားတယ်။

အဲ့တော့ __init__ ထဲက code self.name = name က... p1.name = "Aung Aung" ...လို့ auto အဓိပ္ပာယ် သက်ရောက်သွားတယ်။

အဓိပ္ပာယ်: p1 (ဒီ Object) ရဲ့ (.) name ထဲကို... bro ပေးလိုက်တဲ့ "Aung Aung" ဆိုတဲ့ name ကို ထည့်လိုက် လို့ ပြောတာ။

အဲ့လိုပဲ... p2 = Person("Ma Mya", 30) run တဲ့ အချိန်:

  • self က p2 ဖြစ်သွားတယ်။
  • name က "Ma Mya" ဖြစ်သွားတယ်။
  • age က 30 ဖြစ်သွားတယ်။

self.name = name က... p2.name = "Ma Mya" ...ဖြစ်သွားရော။

Note: အဲ့ဒါကြောင့် self က god ပဲ။ self သာ မရှိရင်... p1 ရဲ့ name နဲ့ p2 ရဲ့ name ကို ဘယ်လို ခွဲတော့မလဲ။ ရှုပ်ကုန်မှာပေါ့။ self က ဘယ် Object ရဲ့ data လဲ ဆိုတာကို ခွဲပေးတဲ့ ကောင် ပါပဲ။

အနှစ်ချုပ်

__init__ (Constructor)

  • Object အသစ် မွေး (create) တိုင်း auto run တဲ့ Setup function။
  • သူ့အလုပ်က Object ရဲ့ မွေးကတည်းက ပါရမယ့် data (Attributes) တွေကို သတ်မှတ်ပေးဖို့။

self (The Object Itself)

  • Class method တွေထဲက ပထမဆုံး parameter။
  • သူက လက်ရှိ သုံးနေတဲ့ Object ကိုယ်တိုင် ကို ညွှန်းတယ်။
  • self က p1 လည်း ဖြစ်နိုင်တယ်၊ p2 လည်း ဖြစ်နိုင်တယ်။ ဘယ် Object က ခေါ်သုံးလဲ ပေါ် မူတည်တယ်။
  • self.name ဆိုတာ ဒီ Object ရဲ့ name လို့ ပြောတာ။