Constructor and Self
__init__ ဆိုတာ? (The Auto-Setup Man)
__init__ (ရှေ့ရောနောက်ရော underscore နှစ်ခုစီ) ကို Constructor လို့ခေါ်တယ်။
ဥပမာ: bro တို့ Person class ကနေ လူ အစစ် (Object) တစ်ယောက် မွေးတယ် ဆိုပါစို့။ p1 = Person("Aung Aung", 25)
အဲ့ဒီ Person(...) ဆိုပြီး ကွင်းစကွင်းပိတ် () ကို ခေါ် (call) လိုက်တဲ့ စက္ကန့်ပိုင်း မှာပဲ... Python က __init__ method ကို auto လှမ်းခေါ်ပြီး run ပေးတယ်။
သူ့အလုပ်: သူ့အလုပ်က Object အသစ်ကို မွေးကင်းစ မှာ လိုအပ်တဲ့ data တွေ တပ်ဆင်ပေးဖို့ပဲ။ လူ တစ်ယောက် မွေး လာရင် နာမည် (name) နဲ့ အသက် (age) auto ပါလာရမယ်လေ။ အဲ့ data တွေကို setup လုပ်ပေးတာ __init__ ပဲ။
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 က:
p1 ကို မွေးတော့မယ်...
DEBUG: __init__ အလုပ်လုပ်နေပြီ! Aung Aung အတွက်...
p2 ကို မွေးတော့မယ်...
DEBUG: __init__ အလုပ်လုပ်နေပြီ! Ma Mya အတွက်...__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 အဓိပ္ပာယ် သက်ရောက်သွားတယ်။
အဲ့လိုပဲ... p2 = Person("Ma Mya", 30) run တဲ့ အချိန်:
selfကp2ဖြစ်သွားတယ်။nameက"Ma Mya"ဖြစ်သွားတယ်။ageက30ဖြစ်သွားတယ်။
self.name = name က... p2.name = "Ma Mya" ...ဖြစ်သွားရော။
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 လို့ ပြောတာ။