[ Python 3 ] 클래스 상속(inheritance)을 제대로 알아보자!
[ 이전 글 ]
클래스(Class)를 제대로 알아보자! (인스턴스 속성, 클래스 속성, 메소드)
[ 클래스 상속(inheritance) ]
상속이란 부모가 자식에게 어떤 것을 물려준다는 것을 의미합니다.
클래스에도 부모 자식 관계가 있습니다.
물려주는 클래스를 Parent Class 또는 Super Class 라고 부릅니다.
물려받는 클래스를 Child Class 또는 Sub Class 라고 합니다.
[ 클래스 상속(inheritance)을 왜 사용할까요? ]
부모가 가진 재산을 물려받는다는 의미를 생각하면 쉽습니다.
저의 부모님이 만약 저에게 100억원의 현금과 강남의 아파트를 상속하셨다면,
제가 돈을 벌기 위해 노력하지 않아도 됩니다.
코딩에서도 동일하게 적용되지요.
부모 클래스의 속성(데이터)과 메소드(함수)를 상속받게 되면,
자식 클래스는 따로 정의하지 않더라도 부모 클래스의 클래스속성과 메소드를 사용할 수 있게 됩니다.
편하게 살자는 말입니다...
[ 구현 해보기 ]
구현은 간단합니다.
부모클래스를 먼저 정의합니다.
이후 소괄호로 부모클래스를 포함시킵니다.
그러면 자식클래스에서는 부모클래스의 클래스 속성과 메소드는 기재하지 않아도 포함이 됩니다.
Point 1) show()라는 메소드는 부모 클래스에만 있는 것입니다. 그럼에도 불구하고 자식노드가 자유롭게 사용하는 것을 볼 수 있습니다.
Point 2) 자식 클래스인 Student는 age를 따로 정의해주지 않았습니다. 그럼에도 불구하고 부모 클래스의 클래스 속성을 상속받아서 a.show_age()의 결과로 "나이"를 출력한 것을 볼 수 있습니다.
Point 3) 만약 자식노드에서 어떠한 속성을 변화시킨다면, 자식노드의 메소드는 변경된 속성을 반영합니다. 위의 예시에서는 "이름"이라는 단어가 아닌 "james"라는 이름을 출력합니다.
[사용한 예시 코드]
class Human:
""" Super Class """
# class 속성!!
name = '사람이름'
age = '나이'
city = '사는도시'
def show(self):
print('사람 클래스의 메소드입니다.')
class Student(Human):
""" Child Class """
def __init__(self,name):
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() # 자식노드에서 속성을 변경
그런데 만약, 부모 클래스가 class 속성이 아닌, instance 속성을 가질 경우엔 어떻게 될까요?
class 속성과 instance 속성을 잘 모르신다면 앞선 글(인스턴스 속성, 클래스 속성))을 읽고 오시는 걸 추천드립니다.
다시 본문으로 돌아와서 아래와 같이 부모 클래스의 인스턴스 속성은 자식 클래스에 상속되지 않습니다.
이럴땐 어떻게 해야할까요?
다음글에서 설명드리겠습니다!!
[ 다음 글 ]
클래스의 super( ) 에 대해 제대로 알아보자! ( super().__init__(), super()의 위치)
super(클래스, self).__init__() 에 대해 제대로 알아보자!!
[ 참고 ]