이번 포스팅은 딥러닝 모델을 공부하면서 나왔던 super() 메서드에 대한 것을 정리했습니다. super()를 사용하기 전 클래스나 상속, 오버라이딩에 대해 알고 있어야 이해가 조금 더 쉽습니다! 여기로 들어가 가볍게 보시는 것을 추천드립니다!
| 부모 클래스의 인스턴스 속성 사용
- 먼저 super()를 사용하지 않고 부모 클래스를 상속받아 인스턴스 속성을 사용해보겠습니다.
| 코드
- 먼저 Parent 클래스의 parentHi 속성이 있고 Parent를 상속받아 만든 Child 클래스 안에는 childHi속성이 있습니다.
class Parent():
def __init__(self):
print("Parent init")
self.parentHi = "부모 클래스"
class Child(Parent):
def __init__(self):
print("Child init")
self.childHi = "자식 클래스"
child = Child()
print(child.hi)
print(child.hello)
| 결과
- 실행을 해보면 child.hi은 잘 호출이 되지만 상속받은 parent의 속성을 호출을 못했는데 에러가 발생한 이유는 parent의 __init__ 메서드가 실행되지 않았기 때문입니다. 즉, Parent 클래스의 __init__이 실행되지 않았기 때문에 parentHi 속성이 존재하지 않기 때문에 발생하는 에러입니다.
| super() 메서드를 사용하여 부모 클래스의 __init__ 호출
- 위 에러를 해결하기 위해 super() 메서드를 사용해 부모 클래스의 __init__ 을 호출합니다.
| 코드
- 코드는 간단합니다. 앞서 만든 Child 클래스에 super().__init__ 만 추가하면 됩니다.
class Parent():
def __init__(self):
print("Parent init")
self.parentHi = "부모 클래스"
class Child(Parent):
def __init__(self):
super().__init__()
print("Child init")
self.childHi = "자식 클래스"
child = Child()
print(child.childHi)
print(child.parentHi)
| 결과
- 실행 결과를 보면 super().__init__이 실행되어 Parent의 __init__()이 호출되었고 그다음 Child의 __init__() 호출, childHi 속성, parentHi 속성이 호출된 것을 볼 수 있습니다.
즉, super().__init__ 이란 상속받은 클래스의 __init__() 메서드를 호출해주는 것입니다.
super().__init__()에 대해 정리해보았습니다.
틀린 점이나 질문이 있으시면 댓글로 남겨주세요!
다음 포스팅으로 찾아오겠습니다 감사합니다 :)
'Python > Python 정리' 카테고리의 다른 글
[Python] 코루틴(coroutine) 정리 : Python 동시성 및 비동기 작업 (0) | 2023.10.03 |
---|---|
[Python] 코딩테스트를 위한 리스트(List) 정리 (0) | 2022.08.08 |
[Python] os.path를 활용한 파일, 디렉터리 관리 (0) | 2022.07.03 |
[Python] os 모듈 (0) | 2022.07.02 |
[Python] __enter__, __exit__ 메서드 (2) | 2022.06.13 |