Python super()

μƒ€μ›Œμ‹€μ˜ 바보·2025λ…„ 2μ›” 5일
0

Python

λͺ©λ‘ 보기
7/10

πŸ”„ 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() μ‚¬μš©μ΄ ꢌμž₯됨.

profile
κ³΅λΆ€ν•˜λŠ” 개발자

0개의 λŒ“κΈ€