본문 바로가기

카테고리 없음

파이썬 클래스 : 상속, 오버라이딩 해서 다양하게 재활용 가능

파이썬도 엄연히 프로그래밍 언어이기 때문에 기존에 다른 언어에서 되는 기능도 지원하고 있네요. 파이썬으로 오버라이딩 어떻게 하는지 알아보겠습니다.

 

오늘도 취미생활겸 지식인 답변활동을 했는데 참신한? 처음 보는 파이썬 상속 문제가 있어서 풀어봤습니다. 그 예제+ 클래스 복습겸 정리해봅니다.

 

 

문제는 이렇습니다.

Father 클래스 상속을 받는 Sun1, Sun2 클래스를 만들고, Father에서 메소드 house() 를 Sun1에서는 단순 상속 받고, Sun2 에서는 오버라이딩 되도록 하라. 그리고 각 아들들이 house()를 호출하라. 단 house()는 "집있습니다." 를 print 하되, 오버라이딩의 경우 "아파트있습니다"로 하라.

 

요약하면

class Father  - 함수 house() - "집 있다"

Sun1 - Father 상속 

Sun2 - Father 상속 오버라이딩. - 함수 house() - "아파트 있다" 

 

정도로 요약할 수 있겠네요. 현실에서는 아빠의 집을 상속받는다고 2채가 되는것은 아니지만.. 그냥 상속받으면 저렇게 말할 수 있다 정도로 이해하면 될것 같아요. 암튼 부럽네요. ㅋㅋ

 

class Father:
    def house():
        print("집 있습니다.")

일단 Father 라는 클래스를 정의 하고 Father 함수 내부에 house()라는 함수도 구현했습니다. 이제 Father 형 클래스를 생성하면 house()라는 함수를 사용할 수 있겠네요.

 

 

아들들 클래스를 정의해봅시다. Sun1() Sun2() 를 정의할때 Father 를 클래스의 매개변수로 넣어준거 보이시죠? 이렇게 하면 Father class를 Sun1,Sun2 가 상속받게 되는겁니다. 

class Sun1(Father):    
	pass

class Sun2(Father):
	pass

이렇게 상속받음으로써, 상속받은 아빠의 함수 house()를 두 자식들이 전부 이용 할 수 있게 되었습니다.

 

 

 

그런데 Sun2 둘째 아들은 house 함수를 오버라이딩 하라고 했으니까 오버라이딩 해봅시다. Sun2에서 다시 재 정의해주기만 하면 됩니다.

class Sun2(Father):
    def house():
        print("아파트 있습니다.")

이렇게 하면 오버라이딩이 완료됩니다.

 

이제 Father, Sun1, Sun2 가 다 정의되었으니 실제 잘 동작하는지 확인해볼까요?

 

Full Code

class Father:
    def house():
        print("집 있습니다.") 


class Sun1(Father):    
    pass

class Sun2(Father):
    def house():
        print("아파트 있습니다.")
        
        
        

a = Sun1
b = Sun2
a.house()
b.house()

Father 의 house 를 그대로 상속받은 Sun1의 house 는 "집 있습니다." 가 나오고 오버라이딩을 한 Sun2의 house는 "아파트 있습니다." 가 나옵니다! 

 

파이썬-오버라이딩-예제실행화면

이렇게 단순상속 과 오버라이딩을 정의하고 구현해서 문제를 해결했습니다 :D 

 

파이썬-클래스상속-오버라이딩-썸네일