Super function
super() áááŻááŹ?
áážááşá¸áážááşá¸ ááźáąáŹááááş Child Class (ááŹá¸) áááą Parent Class (áĄááą) áá˛áˇ Method áá˝áąááᯠáážááşá¸ááąáŤáşááŻáśá¸ááŹá
Bro á ááşá¸á áŹá¸ááźááˇáş... Inheritance ááŻááşáááŻááşáááş Parent ááŽá áĄááŻááşááááşáááŻááąáááˇáşá áá áşááŤáááąááťáááş Parent ááŻááşááŹáááŻáááşá¸ áá°ááťááşáááşá áááŻááşáááŻááşáĄáá áşáááşá¸ áááşááźááˇáşááťááşáááş áááŻáá˛áˇ áĄááźáąáĄááąááťááŻá¸ áážááááşáááŹá¸á
áĄá˛áˇáááŻáĄááťáááşáážáŹ super() á áááşááŤááŹááźáŽá
áĽááᏠ- Phone áá˛áˇ SmartPhone
ááŽáĽáááŹááąá¸ áá˛áˇ ááźááˇáşááĄáąáŹááşá
- Phone (Parent): ááŻááşá¸ááąáŤáşáááŻáˇááááşá brand ááŹáááşáážááááşá
- SmartPhone (Child): ááŻááşá¸áááşá¸ááąáŤáşáááŻáˇááááşá brand áááşá¸áážááááş... ááŤááąáááˇáş áá°áˇáážáŹ wifi áááŻáᏠáááŻááŹáááşá
super() áááŤáááş ááŹááźá áşááá˛á ááŤáááş ááŹáá˝áŹááᲠááźááˇáşááźáááşá
áá super() áááŻáśá¸áᲠááąá¸áááş (áĄááŻááşáážáŻááşáááş)
class Phone:
def __init__(self, brand):
self.brand = brand # áᎠcode ááᯠááźááşááąá¸ááááş
class SmartPhone(Phone):
def __init__(self, brand, wifi):
self.brand = brand # Parent áážáŹ ááąá¸ááźáŽá¸ááŹá¸ááᯠááźááşáááŻááşááąá¸ááąááááş ááťááşá¸á
ááŹááźáŽá¸
self.wifi = wifiáá super() ááŻáśá¸ááźáŽá¸ ááąá¸áááş Smart ááťááť
class Phone:
def __init__(self, brand):
print(f"Phone áĄááťááŻá¸á
áŹá¸ {brand} ááᯠáááşááŽá¸ááąááŤááźáŽ...")
self.brand = brand
class SmartPhone(Phone):
def __init__(self, brand, wifi):
# ááąáˇ super()... áĄááąáˇááŽá __init__ ááᯠáĄáááşáá˝áŹá¸ run ááąá¸ áááŻáˇ áááŻááşá¸áááŻááşááŹ
super().__init__(brand)
# ááźáŽá¸ááž áááŻááˇáşááŹáááŻááş wifi ááᯠáááşáááˇáş
self.wifi = wifi
print(f"Wifi ááŤáá˛áˇ {self.wifi} á
áá
áşááᯠáááˇáşáá˝ááşá¸ááźáŽá¸ááŤááźáŽá")
# Run ááźááˇáşáááş
my_phone = SmartPhone("iPhone", "5G")Output ááŹáá˝ááşááŹááá˛?
Phone áĄááťááŻá¸á
áŹá¸ iPhone ááᯠáááşááŽá¸ááąááŤááźáŽ... Parent áá˛áˇ Code áĄáááş run áá˝áŹá¸áááş
Wifi ááŤáá˛áˇ 5G á
áá
áşááᯠáááˇáşáá˝ááşá¸ááźáŽá¸ááŤááźáŽá ááźáŽá¸ááž Child áá˛áˇ Code run áááşááŹáááŻáˇ super() á áĄááąá¸ááŤááŹáá˛?
1. Code áááşáááąá¸áááąáŹáˇáá°á¸ (DRY - Don't Repeat Yourself):
Parent Class áážáŹ logic áá˝áą áĄááťáŹá¸ááźáŽá¸ (áĽááᏠ- Database ááťáááşááŹá Login á á áşááŹáá˝áą) ááąá¸ááŹá¸áááşáááŻááŤá ááŻáˇá Child Class áážáŹ áĄá˛áˇááŤáá˝áą ááźááşááąá¸áááąáá˛áˇááąáŹáˇá super() áá˛áˇ áážááşá¸ááąáŤáşáááŻááşááŻáśáá˛á
2. Maintenance áá˝ááşáááş:
áá áşááąáˇááťáááş Parent Class áážáŹ áĄááźáąáŹááşá¸áĄáᲠááŻááşáááŻááşáááşáááŻááŤá ááŻáˇá super() ááŻáśá¸ááŹá¸áááş Child Class áá˝áąáĄááŻááşááŻáśá¸ áĄáááŻááᯠáááŻááşááźáąáŹááşá¸áá˝áŹá¸ááááˇáşáááşá áááŻááşááźááşááąá áᏠááááŻááąáŹáˇáá°á¸á
3. Extend ááŻááşááŹ:
Parent áá˛áˇ áĄááŻááşááᯠááŻáśá¸á ááťááşáá áşáᏠ(Override) áááŻááşáá˛á Parent áĄááŻááşáááşá¸ ááŻááşáááşá ááźáŽá¸ááž áááŻááşáááŻááşáĄááŻááş áááşááźááˇáşáááş (Extend) áááŻáá˛áˇ ááąááŹáážáŹ The Best áá˛á
áááşáá˝áąáˇ áĽáááŹ: ááŻáśá¸áá áşááŻáá˛áˇ System
áᎠSystem áážáŹ áá°áážá áşááťááŻá¸áážááááşá
- User (ááŹáááşáááşáááşá¸): áá°áˇáážáŹ Name áá˛áˇ Email áᲠáážááááşá
- Admin (áááşááąááťáŹ): áá°á User áááşá¸ ááŻááşáááşá ááŤááąáááˇáş áá°áˇáážáŹ Access Level (ááŤááŤ) áááŻáážááááşá
ááŽááąáŹáˇ Admin áĄáá˝ááş Code ááąá¸áá˛áˇáĄá፠Name áá˛áˇ Email ááᯠááźááşááąá¸áááąááąáŹáˇáᲠsuper() áá˛áˇ User áᎠáážááşá¸áááŻáˇáááŻááşá¸áááŻááşáááşá
The Code
Code ááąá¸ááᯠááźááşáˇááźá ááŻáˇá Comment áá˛áˇ ááŹáá˝áąááŻááşáá˝áŹá¸áᲠááąá¸ááŹá¸ááąá¸áááşá
# ááŤá Parent Class (ááŹáááş User)
class User:
def __init__(self, name, email):
self.name = name
self.email = email
print(f"User áĄáá
áşááąáŹááşááźáŽá¸ááŤááźáŽ: {self.name} ({self.email})")
def login(self):
print(f"{self.name} is logging in...")
# ááŤá Child Class (Admin)
# Admin á User ááźá
áşáá˛áˇáĄáá˝ááş User ááᯠáĄáá˝áąáá°áááŻááşáááş
class Admin(User):
def __init__(self, name, email, access_level):
# ááŽááąááŹá áĄáááşáᲠBro
# Name áá˛áˇ Email ááá
ášá
ááᯠParent (User) áᎠáááŻáˇááźáŽá¸ áážááşá¸áááŻááşá¸áááŻááşááŹ
# áááŻááşáááŻááş self.name = name áááŻáˇ áááŻááşááąá¸á
áᏠááááŻááąáŹáˇáá°á¸
super().__init__(name, email)
# ááźáŽá¸ááž Admin áá˛áˇáááŻááşáá˛áˇ ááŤááŤááᯠááŽá¸áááˇáş áááşáááˇáşááŹ
self.access_level = access_level
print(f"Admin Access Level '{self.access_level}' ááᯠáááşáážááşááźáŽá¸ááŤááźáŽá")
# Admin áážáŹáᲠááŻáśá¸áááŻáˇááááˇáş Function
def delete_user(self):
print(f"{self.name} á User áá
áşááąáŹááşááᯠááťááşáááŻááşááŤááźáŽá (Admin Power!)")
# --- Run ááźááˇáşááĄáąáŹááş ---
print("--- Normal User áá
áşááąáŹááş ááąáŹááşáááş ---")
staff = User("Maung Maung", "mgmg@company.com")
# Output: User áĄáá
áşááąáŹááşááźáŽá¸ááŤááźáŽ...
print("\n--- Admin áá
áşááąáŹááş ááąáŹááşáááş ---")
boss = Admin("U Ba", "uba@company.com", "SuperAdmin")
# Output 1: User áĄáá
áşááąáŹááşááźáŽá¸ááŤááźáŽ... (super() á Parent ááᯠáĄááŻááşááŻááşáááŻááşá¸áááŻááşáááŻáˇ)
# Output 2: Admin Access Level... (ááźáŽá¸ááž Admin áĄááŻááş áááşááŻááşáá˝áŹá¸áááş)
print("\n--- Action á
ááşá¸ááźááˇáşáááş ---")
boss.login() # Parent ááŽáááŹááᯠááŻáśá¸áááŻáˇááááş
boss.delete_user() # áááŻááˇáşááŹáááŻááşáááşá¸ ááŻáśá¸áááŻáˇááááşááŹáá˝áą ááźá áşáá˝áŹá¸ááŹáá˛?
Bro ááźááşáá˛áˇáĄáááŻááşá¸áᲠAdmin class ááᯠááąáŹááşáááŻááşáá˛áˇáĄááťáááşáážáŹ...
- super().__init__(name, email) áááŻáˇ ááąáŤáşáááŻááşááŹáá˛áˇ Python á áŞ... á፠User class áá˛á __init__ ááᯠáĄáááşáá˝áŹá¸ run áááŻááşá¸ááŹáᲠáááŻááźáŽá¸ User áááşááᯠdata áá˝áą áááŻáˇááąá¸áááŻááşáááşá
- áĄá˛áˇááąáŹáˇ User áááşá self.name áá˛áˇ self.email setup ááŻááşááŹááᯠáĄáááşááŻááşááąá¸áá˝áŹá¸áááşá Bro á Admin áá˛áážáŹ áááşááąá¸á áᏠááááŻááąáŹáˇáá°á¸á Code line áááşááŹáá˝áŹá¸ááźáŽá
- áĄá˛áˇááŤááźáŽá¸ááž self.access_level = access_level áááŻáá˛áˇ Admin ááŽá¸áááˇáşáĄááŻááşááᯠáááşááŻááşáááşá
- super() áááŤáááş: Admin class áá˛áážáŹ self.name = name, self.email = email áááŻááźáŽá¸ áĄá áááą ááźááşáááŻááşááąááááşá Code áá˝áą áá˝áŹá¸ááŻááşáááşá
- super() ááŤááąáŹáˇ: ááŹáááşáá˛áˇ áĄáŽá¸ááąá¸ááşááá ášá áĄááą (Parent) áážááşá¸áááŻááşá Access Level ááá ášá ááťá˝ááşááąáŹáş (Child) áážááşá¸áááş áááŻááźáŽá¸ áĄááŻááşáá˝á˛ááŻááşáá˝áŹá¸ááŹá Smart ááźá áşáá˝áŹá¸ááŹááąáŤáˇá
áááááŹá¸ááááˇáş áĄááťááş
- super() ááᯠáĄááťáŹá¸áĄáŹá¸ááźááˇáş __init__ method áá˛áážáŹ áá˝áąáˇááĄááťáŹá¸ááŻáśá¸áá˛á áá˝áąá¸áá˝áąá¸ááťááşá¸ áĄááąáˇáá˝áąá¸ááŤáĄáąáŹááş áááˇáşáááŻááşáá˛áˇ áááąáŹááąáŤáˇá
- ááŤááąáááˇáş áááźáŹá¸ method áá˝áąáážáŹáááşá¸ ááŻáśá¸áááŻáˇááááşááąáŹáşá
- áĽááᏠ- Parent áá˛áˇ save() method ááᯠáážááşá¸ááąáŤáşááźáŽá¸áážá Child áážáŹ log áááŻááş áááşááąá¸ááŹááťááŻá¸ááąáŤáˇá
Note
| Code | áĄáááášááŹááş |
|---|---|
| super() | ááŤáˇáá˛áˇ Parent Class ááᯠáááŻááşá áŹá¸ááźáŻáááşá |
| super().__init__() | Parent áá˛áˇ áá˝áąá¸á áŹáááşá¸ (init) ááᯠáĄáááşááŻááşááąá¸á፠áááŻáˇ ááźáąáŹááŹá |
| áááşáĄááťáááşááŻáśá¸? | Parent áá˛áˇ features áá˝áąááᯠááá áşáááşááťááşáá°á¸á áááşááŻáśá¸ááťááşáááşá ááźáŽá¸ááž áĄáá áşáááşááźááˇáşááťááşáá˛áˇáĄááťáááşá |
The end
super() áááŻáᏠáĄá˛áˇááŤááŤáá˛á áááşá¸áááşá¸ááąáŹáˇ áážáŻááşááťááşá áᏠááąáŹááşá¸ááąáááˇáşá áááşáá˝áąáˇ Code ááąá¸áá˛áˇáĄá፠Parent ááŽá Code áá˝áąááᯠáážááşá¸áá˝á˛ááŻáśá¸ááťááşáááş ááŤááᯠááááááŤá
OOP áážáŹ ááŽááąáŹááşá ááááş Hero áá˛á