상속(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에 적용되지 않음을 확인할 수 있습니다.
상속은 일반적으로 부모에서 자식에게 물려주는 것이지, 자식에서 부모로 물려주는 일은 아닙니다. 이 점을 생각하면 왜 위의 실행결과가 나오는지 쉽게 이해할 수 있습니다.
'IT공부 > 파이썬 (Python)' 카테고리의 다른 글
파이썬 공부 11 - list에 for 반복문과 if 구문 넣기 (0) | 2020.12.19 |
---|---|
파이썬 공부 10 - with 구문 (0) | 2020.12.16 |
파이썬 공부 8 - turtle 모듈과 tracer, update 함수 (0) | 2020.12.10 |
파이썬 공부 7 - turtle 모듈과 onkey 함수 (1) | 2020.12.09 |
파이썬 공부 6 - 함수를 매개변수(parameter)로 사용하는 경우 (0) | 2020.12.09 |