Class & instance variables

1. Instance Variables (တစ်ကိုယ်ရေသုံး)

ဒါက Bro ရင်းနှီးပြီးသားပါ။ __init__ method ထဲမှာ self. နဲ့ စပြီး ရေးသမျှက Instance Variable တွေချည်းပဲ။

သဘောတရား: Object (Instance) တစ်ခုချင်းစီအတွက် သီးသန့် ဖြစ်တယ်။

ဥပမာ:

Bro နဲ့ Bro သူငယ်ချင်းမှာ ဖုန်းကိုယ်စီ ရှိတယ်။ Bro ဖုန်းရဲ့ Wallpaper ပြောင်းလိုက်ရင် Bro သူငယ်ချင်းဖုန်းမှာ လိုက်ပြောင်းလား? မပြောင်းဘူးလေ။ သူ့ဟာနဲ့သူ သီးသန့် ဖြစ်နေလို့ပဲ။

Instance Variables Example
class Player: def __init__(self, name, hp): # self. ပါတာတွေက Instance Variables (သူ့ကောင် နဲ့ သူ သီးသန့်) self.name = name self.hp = hp p1 = Player("Mg Mg", 100) p2 = Player("Aung Aung", 80) # Mg Mg ရဲ့ HP ကို လျှော့လိုက်ရင် Aung Aung ကို မထိဘူး။ p1.hp = 50

2. Class Variables (အများပိုင်)

ဒါကတော့ အသစ်။ Class ရဲ့ အပေါ်ဆုံး (Method တွေရဲ့ အပြင်ဘက်) မှာ ကြေညာထားတဲ့ Variable တွေပဲ။

သဘောတရား: ဒီ Class ကနေ မွေးဖွားလာသမျှ Object တိုင်းက ဒီကောင့်ကို Share သုံးကြတယ်။

ဥပမာ:

Bro တို့ သူငယ်ချင်းတစ်သိုက်လုံး Yangon United fan တွေ ဆိုပါစို့။ အသင်းနာမည် က အားလုံးအတွက် အတူတူပဲ။ တစ်ယောက်ယောက်က ငါတို့အသင်း လို့ပြောရင် အတူတူပဲ။

Memory:

သူက နေရာတစ်ခုတည်းမှာပဲ နေရာယူတယ်။ အားလုံးက အဲ့နေရာကိုပဲ ဝိုင်းညွှန်း (Reference) ကြတယ်။

Class Variables Example
class Player: # ဒါက Class Variable (အားလုံးနဲ့ ဆိုင်တယ်) game_server = "Asia-Server" def __init__(self, name): self.name = name # စစ်ကြည့်မယ် p1 = Player("Mg Mg") p2 = Player("Aung Aung") print(p1.game_server) # Output: Asia-Server print(p2.game_server) # Output: Asia-Server

The Difference (ဘာကွာလဲ?)

ဒီ Code လေးကို ခဏရှိုး၊ မျက်စိထဲ ရှင်းသွားလိမ့်မယ်။

Complete Example - Class vs Instance Variables
class Employee: # Class Variable (Company နာမည်က ဝန်ထမ်းတိုင်းအတွက် တူတူပဲ) company_name = "Tech Bros Co., Ltd." def __init__(self, name, salary): # Instance Variables (နာမည် နဲ့ လစာက တစ်ယောက်နဲ့တစ်ယောက် မတူဘူး) self.name = name self.salary = salary # ဝန်ထမ်း ၂ ယောက် ဖန်တီးမယ် emp1 = Employee("Kyaw Kyaw", 500000) emp2 = Employee("Zaw Zaw", 800000) print("--- မပြင်ခင် ---") print(f"{emp1.name} works at {emp1.company_name}") print(f"{emp2.name} works at {emp2.company_name}") # ယိုး... Company နာမည် ပြောင်းလိုက်မယ် # Class Variable ကို ပြင်လိုက်ရင် အကုန်လုံး လိုက်ပြောင်းသွားတယ် Employee.company_name = "Super AI Corp" print("\n--- ပြင်ပြီး ---") print(f"{emp1.name} works at {emp1.company_name}") # ပြောင်းသွားပြီ print(f"{emp2.name} works at {emp2.company_name}") # ဒီကောင်လည်း လိုက်ပြောင်းသွားပြီ
Output: တွေ့လား? Employee.company_name ကို တစ်ချက်ပဲ ပြင်လိုက်တာ emp1 ရော emp2 မှာပါ Company နာမည် လိုက်ပြောင်းသွားတယ်။ ဒါ Class Variable ရဲ့ Power ပဲ။

အနှစ်ချုပ်

အချက် Instance Variable (Private) Class Variable (Shared)
နေရာ __init__ ထဲမှာ self. နဲ့ ရေးတယ်။ Class အောက် (Method အပြင်) မှာရေးတယ်။
ပိုင်ရှင် Object တစ်ခုချင်းစီက ပိုင်တယ်။ Class ကြီးတစ်ခုလုံးက ပိုင်တယ်။
အသုံးပြုပုံ တစ်ယောက်ချင်းစီရဲ့ Data (Name, Age, ID) အားလုံးတူတူသုံးမယ့် Data (Config, Constants, Counters)
Effect တစ်ယောက်စာ ပြင်ရင် ကျန်တဲ့လူ မထိဘူး။ Class ကနေ ပြင်လိုက်ရင် အကုန်လုံး လိုက်ပြောင်းတယ်။

ထောင်ချောက်

emp1.company_name = "Evil Corp" ဆိုပြီး Object ကနေတဆင့် Class Variable ကို သွားပြင်ရင် ဘာဖြစ်မလဲ သိလား?

သတိပေးချင်တာ: Class ကြီးတစ်ခုလုံး မပြောင်းသွားဘူး။ အဲ့ဒီ emp1 အတွက်ပဲ သီးသန့် company_name အသစ်တစ်ခု ထွက်လာပြီး မူရင်း Class Variable ကို Override (ဖုံးလိုက်) သွားလိမ့်မယ်။ ကျန်တဲ့ emp2 ကတော့ မူရင်းအတိုင်း ကျန်ခဲ့မယ်။

ဒါ နည်းနည်းရှုပ်တယ်၊ ဒါပေမယ့် Class Variable ကို ပြင်ချင်ရင် Class Name နဲ့ ပဲခေါ်ပြင်တာ အကောင်းဆုံး လို့ မှတ်ထားရင် ရပြီ။

နိဂုံး

  • Instance Variables: Object တစ်ခုချင်းစီအတွက် သီးသန့်။ self. နဲ့ ရေးတယ်။
  • Class Variables: Class ကနေ မွေးလာသမျှ Object တိုင်း Share သုံးတယ်။ Class အောက်မှာ ရေးတယ်။
  • Best Practice: Class Variable ကို ပြင်ချင်ရင် ClassName.variable_name နဲ့ ပဲပြင်။