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()를 응용한 오버라이딩이었다는 것에 주목하자.

 

이처럼 상속은 잘만쓰면 중복된 코드 사용을 확 줄일 수 있고, 남는 시간을 더 좋은 기능을 위한 구현에 쓸 수 있다.