클래스의 상속
상속은 클래스들 간에 기능을 공유하는데 사용되는 방법입니다. 예를 들어, 조종사(Pilot)와 의사(Doctor)라는 직업을 가진 사람을 클래스로 표현한다고 생각해봅시다. 조종사는 날아다니고(fly) 의사는 치료(cure)를 하는 전혀 다른 직업의 사람이지만 두 사람 모두 이름이나 나이와 같은 일반적인 속성도 가지고있는 사람이라는 공통점이 있습니다.
이런 경우를 클래스로 표현한다고 하면 다음과 같이 표현할 수 있습니다.
예제:
class Person:
def __init__(self, name, age):
self.name = name
self.color = age
class Pilot(Person):
def job(self):
print("I can fly")
class Doctor(Person):
def job(self):
print("I cure you")
captain = Pilot("jone", "30")
print(captain.name)
captain.job()
결과:
먼저 Person이라는 클래스를 선언했는데 이름(name), 나이(age)라는 속성이 들어있습니다. 그뒤에 Pilot과 Doctor라는 클래스가 나오는데 둘다 Person 클래스를 상속받고 있습니다.
그래서 14행에서 "Pilot"이라는 클래스를 정의하면서 이름은 존(jone)이시고 나이는 30세라고 지정해 주었습니다. 그리고 "captain"이라는 변수에 클래스를 통째로 넣어주었습니다.
그러면 이제 "captain"이라는 변수/객체는 사람이면서 직업은 조종사이고 이름은 존 나이는 서른살인 사람을 나타내게 되는거죠.
동일한 속성을 상속받을때는 덮어쓰기
다른 클래스로부터 상속을 받는 클래스는 subclass라고 부르고 상속을 하는 클래스는 superclass라고 부릅니다. 만약 동일한 속성을 다른 클래스로부터 상속받는 경우 그 속성은 덮어쓰기가 됩니다.
예제:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def job(self):
print("Can do anything!")
class Doctor(Person):
def job(self):
print("Cure people!")
my_doctor = Doctor("Jane", "28")
my_doctor.job()
결과:
여기서는 Person이 superclass이고 Doctor가 class입니다. 그리고 Person의 job()메소드는 Doctor의 메소드와 중복되어 최종적으로 subclass의 속성이 결과에 반영된 것을 확인 할 수 있습니다.
간접상속
상속은 제3의 클래스로부터 간접적으로 다른 클래스의 속성을 상속받을 수도 있습니다.
예제:
class One:
def function1(self):
print("1")
class Two(One):
def function2(self):
print("2")
class Three(Two):
def function3(self):
print("3")
three = Three()
three.function1()
three.function2()
three.function3()
결과:
super() 함수
super()함수는 상속관계에서 부모 클래스를 참조하는데 사용하는 매우 유용한 함수라고 합니다. 이 함수는 superclass의 특정이름의 객체를 찾는데 사용될 수 있습니다.
예제:
class One:
def Function(self):
print(1)
class Two(One):
def Function(self):
print(2)
super().Function()
Two().Function()
결과:
"Two" 클래스는 "One" 클래스에서 상속을 받고 있는상태인데 8행인 "Two"클래스 안에서 "super()"함수를 사용해서 "Function()"함수를 호출하고 있습니다. "super()"함수는 supperclass를 지시하기 때문에 "One"클래스에 있는 "Function()"이 호출되어서 "1"이 출력되고 있습니다.
이상 클래스의 상속에 대해서 마무리하겠습니다.
끝!
'Software > Python' 카테고리의 다른 글
[파이썬의 기본] 마술 함수(?) 매직 메소드 (Magic Methods ) (0) | 2019.06.24 |
---|---|
[파이썬의 기본] 파일에서 읽고 쓰기 (2) | 2019.05.24 |
[파이썬의 기본] 클래스(Class) (2) | 2019.05.22 |
[PyQt 파이썬 GUI프로그래밍] Layout으로 창크기에 따라 창요소 크기도 같이 조절되도록 하기 (15) | 2019.05.21 |
댓글