파이썬도 엄연히 프로그래밍 언어이기 때문에 기존에 다른 언어에서 되는 기능도 지원하고 있네요. 파이썬으로 오버라이딩 어떻게 하는지 알아보겠습니다.
오늘도 취미생활겸 지식인 답변활동을 했는데 참신한? 처음 보는 파이썬 상속 문제가 있어서 풀어봤습니다. 그 예제+ 클래스 복습겸 정리해봅니다.
문제는 이렇습니다.
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