π Python μμ(Inheritance) - super()λ₯Ό νμ©ν μμ
πΉ 1οΈβ£ super()λ?
β’ super()λ λΆλͺ¨ ν΄λμ€(Super Class) μ λ©μλλ₯Ό μμ ν΄λμ€μμ νΈμΆν λ μ¬μ©ν©λλ€.
β’ μ΄λ₯Ό ν΅ν΄ λΆλͺ¨ ν΄λμ€μ κΈ°λ₯μ νμ₯(Override) νλ©΄μλ κΈ°μ‘΄ κΈ°λ₯μ μ¬μ¬μ©ν μ μμ΅λλ€.
β’ νΉν μμ±μ(init)λ₯Ό μμλ°μ λ μ μ©ν©λλ€.
πΉ 2οΈβ£ super()λ₯Ό νμ©ν μμ μμ
π λΆλͺ¨ ν΄λμ€ Animal
# λΆλͺ¨ ν΄λμ€ (Super Class)
class Animal:
def __init__(self, name, sound):
self.name = name # κ³΅ν΅ μμ±: μ΄λ¦
self.sound = sound # κ³΅ν΅ μμ±: μ리
def make_sound(self):
return f"{self.name}μ΄(κ°) {self.sound} μ리λ₯Ό λΈλ€."
π μμ ν΄λμ€ Dog, Cat (λΆλͺ¨ ν΄λμ€ Animal μμ)
# μμ ν΄λμ€ Dog (λΆλͺ¨ ν΄λμ€ Animalμ μμ)
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name, "λ©λ©") # λΆλͺ¨ ν΄λμ€μ μμ±μ νΈμΆ
self.breed = breed # μΆκ° μμ±: 견μ’
def make_sound(self): # λ©μλ μ€λ²λΌμ΄λ©
return f"{self.name} ({self.breed})μ΄(κ°) {self.sound}νκ³ μ§λλ€."
# μμ ν΄λμ€ Cat (λΆλͺ¨ ν΄λμ€ Animalμ μμ)
class Cat(Animal):
def __init__(self, name, color):
super().__init__(name, "μΌμΉ") # λΆλͺ¨ ν΄λμ€μ μμ±μ νΈμΆ
self.color = color # μΆκ° μμ±: νΈ μκΉ
def make_sound(self): # λ©μλ μ€λ²λΌμ΄λ©
return f"{self.name} ({self.color}μ)κ° {self.sound}νκ³ μ΄λ€."
πΉ 3οΈβ£ super()λ‘ λΆλͺ¨ ν΄λμ€ λ©μλ νΈμΆ
# κ°μ²΄ μμ±
dog = Dog("Buddy", "골λ 리νΈλ¦¬λ²")
cat = Cat("Luna", "ν°μ")
# λΆλͺ¨ ν΄λμ€μ μμ± μ κ·Ό
print(dog.name) # Buddy
print(cat.name) # Luna
# λΆλͺ¨ ν΄λμ€μ λ©μλ νΈμΆ (μ€λ²λΌμ΄λ©λ λ²μ )
print(dog.make_sound()) # Buddy (골λ 리νΈλ¦¬λ²)μ΄(κ°) λ©λ©νκ³ μ§λλ€.
print(cat.make_sound()) # Luna (ν°μ)κ° μΌμΉνκ³ μ΄λ€.
β μΆλ ₯ κ²°κ³Ό
Buddy
Luna
Buddy (골λ 리νΈλ¦¬λ²)μ΄(κ°) λ©λ©νκ³ μ§λλ€.
Luna (ν°μ)κ° μΌμΉνκ³ μ΄λ€.
π₯ 4οΈβ£ super() μμ΄ λΆλͺ¨ ν΄λμ€ λ©μλ νΈμΆνκΈ°
super()λ₯Ό μ¬μ©νμ§ μκ³ λ Animal.init(self, name, sound)μ μ§μ νΈμΆν μ μμ§λ§, super()λ₯Ό μ¬μ©νλ©΄ λ€μ€ μμμμλ μ½λ μ μ§λ³΄μκ° μ©μ΄ν©λλ€.
class Dog(Animal):
def __init__(self, name, breed):
Animal.__init__(self, name, "λ©λ©") # super() μμ΄ μ§μ λΆλͺ¨ ν΄λμ€ νΈμΆ
self.breed = breed
β οΈ κ·Έλ¬λ, super()λ₯Ό μ¬μ©νλ κ²μ΄ λ κΆμ₯λ©λλ€!
βοΈ λ€μ€ μμ μμλ μμ μ μΌλ‘ λμνκΈ° λλ¬Έμ λλ€.
π― μ 리
κ°λ | μ€λͺ |
---|---|
super() | λΆλͺ¨ ν΄λμ€μ μμ±μ λ° λ©μλλ₯Ό νΈμΆν λ μ¬μ© |
λ©μλ μ€λ²λΌμ΄λ© | λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€μμ μ¬μ μ |
λΆλͺ¨ ν΄λμ€μ μμ± μμ | super().init(...)μ μ¬μ©νλ©΄ λΆλͺ¨ ν΄λμ€μ μμ±μ μ μ§ |
μΆκ° μμ± | μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ μμ± + μΆκ°μ μΈ μμ±μ κ°μ§ μ μμ |
π― μ΅μ’ μμ½
β’ super()λ₯Ό μ¬μ©νλ©΄ λΆλͺ¨ ν΄λμ€μ μμ±κ³Ό λ©μλλ₯Ό μ¬μ¬μ©νλ©΄μλ μμ ν΄λμ€λ§μ νΉμ±μ μΆκ°ν μ μμ.
β’ νΉν λ€μ€ μμμμλ super()λ₯Ό μ¬μ©νλ©΄ μ¬λ°λ₯Έ λΆλͺ¨ ν΄λμ€μ λ©μλκ° νΈμΆλ¨.
β’ super() μμ΄ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ§μ νΈμΆν μλ μμ§λ§, μ μ§λ³΄μμ±κ³Ό νμ₯μ±μ κ³ λ €νλ©΄ super() μ¬μ©μ΄ κΆμ₯λ¨.