본문 바로가기

파이썬 프로그래밍/파이썬 기초

[Python] 파이썬의 오버라이드의 특징 비교 (기초주의)

개념

오버라이드(Override)
- 같은 이름을 가진 메소드를 덮어쓴다는 뜻입니다.


실습

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class father(): #부모 클래스
    def handsome(self):
        print("잘생겼다")
 
class brother(father): #자식클래스(부모클래스) 아빠매소드를 상속받겠다
    '''아들'''
 
class sister(father): #자식클래스(부모클래스) 아빠매소드를 상속받겠다
    def pretty(self):
        print("예쁘다")
    def handsome(self):
        self.pretty()
 
brother = brother()
brother.handsome()
 
girl = sister()
girl.handsome()
cs

포인트는

1. 5째줄에 brother은 father에게 상속만 받고 있습니다.

2. 11~12째줄에 아빠에게 이미 예쁘다는 메소드를 받고있지만 아빠에게 잘생겼다를 물려받았습니다


문제

1. 아들은 아빠에게 잘생김을 물려받을 수 있을까?

2. 딸은 아빠에게 물려받은 잘생김을 출력할까? or 예쁘다로 출력할까?

2-1. 만약 딸이 예쁘다로 출력된다면 아빠의 handsome에도 영향을 미쳐 아들도 예쁘다 라고 표현될까?






정답



왜 이렇게 출력이 되는것일까?

그림을 봐도 이해 안되시는분들.


아들과 딸은 각각 아빠에게 handsome이라는 메소드를 받았습니다.

handsome메소드 안에는 "잘생겼다"가 출력되게 되었었죠.


class 아들은 아빠에게 상속받아 잘생겼다가 출력되었고,

class 딸은 이미 상속을 받았지만 예쁘다 라고 사용중이기 때문에 잘생겼다를 무시하게 됩니다. (이것을 오버라이딩)


추가로 딸이 상속받은 메소드를 변형시켜도 다른 자식이나 부모까지 영향을 주지 않습니다!

왜냐하면 물려받은 것일 뿐이니까요