AboutPython
[파이썬] 오버라이딩
scone
2022. 5. 4. 09:14
[오버라이딩]
- 하위 클래스에서 상위 클래스의 메서드를 재정의 하는 것을 오버라이딩이라 한다.
로봇이 있었고, 새로운 버전의 로봇이 출시 되었다고 하자.
새 로봇은 기존 로봇을 상속받아 만들었지만, fire 기능이 총에서 레이저로 업그레이드 되었다고 하자.
이때 부모 클래스의 기능을 자식 클래스의 기능으로 재정의 하는 것을 오버라이딩이라고 한다.
class Robot :
def __init__(self,c,h,w) :
self.color = c
self.height = h
self.weight = w
def print_robot_info(self):
print(f'색깔은 {self.color}')
print(f'높이는 {self.height}')
print(f'무게는 {self.weight}')
def fire(self):
print('총 발싸')
class NewRobot(Robot) :
def __init__(self,c,h,w):
super().__init__(c,h,w)
def fire(self):
print('미사일 발사')
irobot = NewRobot('red',100,1000)
irobot.print_robot_info()
irobot.fire()
'''
색깔은 red
높이는 100
무게는 1000
미사일 발사
'''
로봇의 fire()이 총에서 미사일 발사로 업그레이드 됐다.
[실습1] 삼각형의 넓이를 출력하는 class를 상속받아 단위까지 같이 출력하는 클래스를 만들어보자.
class TriangleArea :
def __init__(self,w,h):
self.width = w
self.height = h
def print_info(self):
print(f'너비는 {self.width}, 높이는 {self.height}')
def getArea(self):
return round(self.width*self.height/2,2)
class UpgradeTriangleArea(TriangleArea):
def __init__(self, w, h):
super().__init__(w, h)
def getArea(self):
print(str(super().getArea())+'㎠')
triangle = UpgradeTriangleArea(4,6)
triangle.print_info()
triangle.getArea()
'''
너비는 4, 높이는 6
12.0㎠
'''
getArea()를 오버라이딩 했다.
이때 부모 클래스의 getArea()를 응용한 오버라이딩이었다는 것에 주목하자.
이처럼 상속은 잘만쓰면 중복된 코드 사용을 확 줄일 수 있고, 남는 시간을 더 좋은 기능을 위한 구현에 쓸 수 있다.