본문 바로가기
파이썬

super()메소드와 다중상속

by 코낄2 2023. 9. 13.

1.super() 메소드

super() 파이썬의 내장 함수로서상속과 관련된 작업을 수행할  사용됩니다특히자식 클래스에서 부모 클래스의 메서드를 호출할  사용됩니다. super() 주요 목적은 자식 클래스에서 부모 클래스의 메서드를 오버라이드(재정의)하면서도  오버라이드된 메서드 내에서 부모 클래스의 원본 메서드를 호출하는 것입니다.

class Parent:
    def hello(self):
        print('Hello from Parent class')
 
class Child(Parent):
    def hello(self):
        super().hello()
        print('Hello from Child class')
 
c = Child()
c.hello()
 
Hello from Parent class
Hello from Child class  
  • __init__ 메서드에서 사용
class Parent:
    def __init__(self, value):
        self.value = value
 
class Child(Parent):
    def __init__(self, value, child_value):
        super().__init__(value)
        self.child_value = child_value
 
c = Child(10,20)
print(c.value)               # 10
print(c.child_value)     # 20
  • 다중 상속에서의 사용
class Base:
    def hello(self):
        print('Hello from Base class')

class A(Base):
    def hello(self):
        super().hello()
        print('Hello from A class')

class B(Base):
    def hello(self):
        super().hello()
        print("Hello from B class")

class Child(A,B):
    def hello (self):
        super().hello()
        print('Hello from Child class')
 
c = Child()
c.hello()
 
Hello from Base class
Hello from B class
Hello from A class
Hello from Child class
 

2. 다중 상속

다중 상속은 클래스가  이상의 부모 클래스로부터 상속을 받는 기능을 의미합니다. 파이썬은 다른 많은 객체 지향 언어와 달리 다중 상속을 지원합니다. 다중 상속을 사용하면 코드의 재사용성을 향상시킬  있지만, 동시에 복잡성이 높아지기 때문에 주의해야 합니다.

 

class Parent1:
    pass

class Parent2:
    pass

class Child(Parent1, Parent2):
    pass
class Animal:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self,food):
        print(f'{self.name}은(는) {food}을(를) 먹습니다.')

    def sleep(self,hour):
        print(f'{self.name}은(는) {hour}시간 동안 잠을 잡니다.')
class Human:
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def study(self,hour):
        print(f'{self.name}은(는) {hour}시간 동안 공부를 합니다.')
class KimApple(Animal, Human):
    pass
 
Kim = KimApple('김사과',20)
Kim.eat('밥')
Kim.study(2)
print(KimApple.mro())  # 다이아몬드 문제 발생시 메서드가 실행되는 순서.
 
김사과은(는) 밥을(를) 먹습니다.
김사과은(는) 2시간 동안 공부를 합니다.
[<class '__main__.KimApple'>, <class '__main__.Animal'>, <class '__main__.Human'>, <class 'object'>]

***메서드 해석 순서 (Method Resolution Order, MRO):

파이썬에서는 위와 같은 다이아몬드 문제를 해결하기 위해 MRO를 사용합니다. MRO는 클래스의 메서드를 찾을 때 사용하는 규칙입니다.

'파이썬' 카테고리의 다른 글

파일 입출력 라이브러리2  (0) 2023.09.14
파일 입출력 라이브러리  (0) 2023.09.14
상속  (0) 2023.09.13
객체지향과 클래스  (0) 2023.09.12
콜백 함수/람다함수/재귀호출  (0) 2023.09.12