본문 바로가기
컴퓨터 언어/Python

[ Python 3 ] 클래스의 super( ) 에 대해 제대로 알아보자! ( super().__init__(), super()의 위치)

by SuperMemi 2022. 8. 15.
반응형

[ Python 3 ] 클래스의 Super( ) 에 대해 제대로 알아보자! ( super().__init__(), super()의 위치)


[ 이전 글 ]

클래스(Class)를 제대로 알아보자! (인스턴스 속성, 클래스 속성, 메소드)

 

[ Python 3 ] 파이썬의 클래스(Class)를 제대로 알아보자! (인스턴스 속성, 클래스 속성, 메소드)

[ Python 3 ] 파이썬의 클래스(Class)를 제대로 알아보자! (인스턴스 속성, 클래스 속성, 메소드) 간단하게 클래스와 객체가 무엇인지는 다들 잘 아실 겁니다. 그러나 클래스 안의 데이터와 메

supermemi.tistory.com

클래스 상속(inheritance)을 제대로 알아보자!

 

[ Python 3 ] 파이썬의 클래스 상속(inheritance)을 제대로 알아보자!

[ Python 3 ] 파이썬의 클래스 상속(inheritance)을 제대로 알아보자! [ 이전 글 ] 파이썬의 클래스(Class)를 제대로 알아보자! (인스턴스 속성, 클래스 속성, 메소드) [ Python 3 ] 파이썬의 클래스(Clas..

supermemi.tistory.com


[ super( )의 역할 ]

 

앞선 두 글을 모두 읽고 왔다는 것을 전제로 작성합니다.

 

 

super() 라는 함수는 super class 즉, 부모클래스의 임시적인 객체를 반환하여 부모클래스의 메소드를 사용할 수 있게 하는 것 입니다.

아주 중요한 개념입니다!!

 

 

잘 이해가 안되실 수도 있는데 이전 글의 마지막 예시를 통해보죠.

 

 

 

우리는 이전 예시에서 "부모 클래스의 인스턴스 속성은 자식 클래스에 상속되지 않는다" 는 걸 알았습니다.


왜 상속되지 않은걸까요??

 

인스턴스 속성이 언제 생기는지를 생각해보면 간단해 집니다. 

 

위의 예시에서 부모 클래스의 인스턴스 속성은 부모 클래스 객체가 형성될때 __init__ 매직 메소드가 실행되면서 생성 될 것입니다.

그러나 자식 클래스 어디에도 부모 클래스의 객체가 형성된 적이 없지요.

 

그래서 super()라는 함수를 이용하여 부모 클래스의 __init__() 매직 메소드를 자식 클래스에 실행시키면 문제가 해결됩니다!!

 

그것이 바로 super().__init__() 의 사용 이유입니다.

 


[ super().__init__() 의 역할 ]

 

부모 클래스의 __init__() 매직 메소드를 자식 클래스의 __init__() 매직 메소드에서 실행 한다 고 생각하시면 됩니다.

즉, 자식 클래스에도 부모 클래스의 인스턴스 속성과 동일한 속성이 생성되는 것입니다. 

 

class Human:
    """ Super Class """
    def __init__(self):
        # instance 속성!!
        self.name  = '사람이름'
        self.age   = '나이'
        self.city  = '사는도시'

    def show(self):
        print('사람 클래스의 메소드입니다.')

class Student(Human):
    """ Child Class """

    def __init__(self,name):
        super().__init__()
        self.name = name

    def show_name(self):
        print('사람의 이름은 : ',self.name)

    def show_age(self):
        print('사람의 나이는 : ',self.age)
        
a = Student('james')
a.show()        # 메소드 상속 
a.show_age()    # 인스턴스 속성 상속
a.show_name()   # 자식노드에서 속성을 변경

[ super().부모클래스의 메소드() ]

 

위의 내용을 일반화하면 부모 클래스의 메소드를 자식 클래스에서 직접 사용할 수 있게 된다는 점입니다. 

 

위의 예시를 조금 변형하여 부모 클래스에 show_everything 이라는 메소드를 만들었습니다.

그리고 자식 클래스에서는 super().__init__()과 더불어 show_name 자식 클래스 메소드에 super().show_everything() 메소드를 상속하여 사용했습니다.

 

 

메소드를 불러와 사용하는 것이지, 부모 클래스의 인스턴스 속성 자체를 변화시키는 것은 아닙니다. 

 

다시말하지만, super()는 임시적으로 부모 클래스의 객체를 실행시켜 메소드를 사용하기 위한 것입니다.

 

 

위의 예시를 보면 super().__init__() 의 순서에 따라 초기화 내용이 달라집니다.

self.name = name 이 먼저 업데이트 된 후

super().__init__() 에 의해 임시적인 부모 클래스의 self.name = '사람이름' 으로 다시 바뀌게 됩니다.


[ 다음 글]

super(클래스, self).__init__() 에 대해 제대로 알아보자!!

 

[ Python 3 ] super(클래스, self).__init__() 에 대해 제대로 알아보자!!

[ Python 3 ] super(클래스, self).__init__() 에 대해 제대로 알아보자!! [ 이전 글 ] 파이썬의 클래스(Class)를 제대로 알아보자! (인스턴스 속성, 클래스 속성, 메소드) [ Python 3 ] 파이썬의 클래스(Class..

supermemi.tistory.com


 

반응형