상속(inheritance)

클래스에는 상속(inheritance)이라는 개념이 있습니다. 두개 이상의 클래스가 있을 때, 상위에 있는 클래스가 하위에 있는 클래스에게 자신의 기능을 물려주는 것을 뜻합니다.


Example

class Korea(상위 클래스)가 가지고 있는 함수

population, ethnic_composition, who_has_sovereignty


class Seoul(하위 클래스)가 가지고 있는 함수

specialty, ethnic_composition, who_has_sovereignty


-> class Korea의 ethnic_composition, who_has_sovereignty 함수는 class Seoul이 가진 동일 이름의 함수와 값이 같음(*한국과 서울의 민족 구성 및 주권 소재는 같기 때문). 따라서 class Korea의 ethnic_composition, who_has_sovereignty는 class Seoul에 물려줄 수 있음.


이 때, 상위에 있는 class Korea는 super class(부모 클래스)라 하며, 하위에 있는 class Seoul은 sub class(자식 클래스)라고 부릅니다.


super class(부모 클래스) 와 sub class(자식 클래스)

이제 실제로 코드를 작성해보겠습니다.

super class로 class Mammal을, sub class로 class Human을 만들어 보겠습니다.

class Mammal:
def __init__(self):
print("Mammals")

def legs_arms(self):
self.legs = 2
self.arms = 2
print("Mammals have 2 legs and 2 arms")

def breathe(self):
print("Mammals inhale O2, exhale CO2")

class Human(Mammal):
def __init__(self):
super().__init__()
print("Humans")

def read_write(self):
print("Humans can read and write")

mammal = Mammal()
print()
human = Human()

실행결과는 아래와 같습니다.

class Mammal을 실행하니 Mammals이라 출력되었습니다.

그런데 class Human을 실행하니 Mammals 와 Humans가 같이 출력되었습니다. __init__ 함수에 Mammals를 프린트하라는 지시가 없었는데도 말입니다.


그 이유는 class Human의 __init__ 함수에 super class인 class Mammal의 __init__ 함수를 상속해주었기 때문입니다. ( super().__init__() )

그래서 class Human을 실행하면 class Mammal로 부터 상속받은 Mammals와 class Human 자체가 가지고 있는 Humans가 같이 출력된 것입니다.


그럼 혹시 class Mammal이 가진 모든 method들을 상속 받을 수 있을까요?


class Mammal:
def __init__(self):
print("Mammals")

def legs_arms(self):
self.legs = 2
self.arms = 2
print("Mammals have 2 legs and 2 arms")

def breathe(self):
print("Mammals inhale O2, exhale CO2")

class Human(Mammal):
def __init__(self):
super().__init__()
print("Humans")

def read_write(self):
print("Humans can read and write")

mammal = Mammal()
print()
human = Human()
print()
human.legs_arms()
human.breathe()

class Mammal의 legs_arms, breathe 함수를 class Human에게 주어 실행시켜보니 잘 실행됨을 확인할 수 있습니다.


class Mammal:
def __init__(self):
print("Mammals")

def legs_arms(self):
self.legs = 2
self.arms = 2
print("Mammals have 2 legs and 2 arms")

def breathe(self):
print("Mammals inhale O2, exhale CO2")

class Human(Mammal):
def __init__(self):
super().__init__()
print("Humans")

def read_write(self):
print("Humans can read and write")

mammal = Mammal()
print()
human = Human()
print()
mammal.read_write()

반면에 class Mammal에 없는 read_write 함수를 class Mammal에게 주고 실행시켜보니 에러가 발생합니다. sub class의 함수는 super class에 적용되지 않음을 확인할 수 있습니다. 


상속은 일반적으로 부모에서 자식에게 물려주는 것이지, 자식에서 부모로 물려주는 일은 아닙니다. 이 점을 생각하면 왜 위의 실행결과가 나오는지 쉽게 이해할 수 있습니다.



블로그 이미지

방구석 세계인

관심분야 : 외국어 학습, 프로그래밍, 책 리뷰 등...

,