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 |