- python 오버라이드
- python override
- super()
1. Override
class Animal():
def walk(self):
print("걷는다.")
def eat(self):
print("먹는다.")
def greet(self):
print("인사한다.")
class Human(Animal):
'''사람'''
def wave(self):
print("손을 흔든다.")
def greet(self):
self.wave()
class Dog(Animal):
'''강아지'''
def wag(self):
print("꼬리를 흔든다.")
def greet(self):
self.wag()
person = Human() #인스턴스 생성
person.greet()
dog = Dog() #강아지 인스턴스 생성
dog.greet()
- 부모클래스로부터 같은 메소드를 상속받았지만 다르게 표현해야할 경우가 있다.
- 이처럼 부모클래스의 메소드를 자식메소드에 똑같이 사용하는 것을 "Override"라고 한다.
- 즉, 부모 메소드를 덮어씌운다 라고 이해하면 된다.
2. 예제
- Car 클래스를 Truck이 상속받아 Run 메소드를 Override로 진행해보자
class Car():
def run(self):
print("차가 달립니다.")
class Truck(Car):
def load(self):
print("짐을 실었습니다.")
def run(self):
print("트럭이 달립니다.")
truck = Truck()
truck.run()
3. super()
class Animal():
def __init__(self,name):
self.name = name
def walk(self):
print("걷는다.")
def eat(self):
print("먹는다.")
def greet(self):
print("{}이/가 인사한다.".format(self.name))
class Human(Animal):
'''사람'''
def __init__(self, name, hand):
super().__init__(name)
self.hand = hand
def wave(self):
print("{}을 흔들면서".format(self.hand))
def greet(self):
self.wave()
super().greet()
person = Human("사람","오른손")
person.greet()
- Animal을 상속받은 Human Class에서 바로 실행하는 메소드 "__init__"에 "super()"를 사용했다.
- super()를 통해 부모의 "__init__에 접근하여 메소드를 호출한다.
- 자식 메소드의 "__init__"에 의하여 바로 메소드가 호출된다.
- 자식의 greet()를 호출했으므로 실행 방향은
- self.wave() -> {}을 흔들면서
- super().greet() 호출
- {} 이/가 인사한다.
#출력 결과
오른손을 흔들면서
사람이/가 인사한다.
4. 실습
- 자식 Truck 클래스에서 name, capacity를 입력받고 super()를 사용해서 호출해보자
class Car():
def __init__(self, name):
self.name = name
def run(self):
print("차가 달립니다.")
class Truck(Car):
def __init__(self, name, capacity):
super().__init__(name)
self.capacity = capacity
def load(self):
print("짐을 실었습니다.")