본문 바로가기

파이썬/3. 객체지향 프로그래밍

파이썬 메서드 오버라이딩(Method Overriding)과 다형성(Polymorphism)

오버라이딩(Overriding)

  • 상속에서 쓰이는 개념
  • 부모 클래스의 메소드를 자식 클래스에서 재정의 하는 것.
  • 이름이 같은 메소드가 자식 클래스에서 사용되면 부모 클래스 메소드는 무시된다.
  • 같은 이름의 함수가 있으면 자식의 함수가 우선
  • 참고) 파이썬의 경우 오버로딩 불가능
class Parent:
    def hi(self):
        print("하이")
        
class Child(Parent):
    def hi(self):
        print("안녕하세요")
        
a = Child()
a.hi()
# "안녕하세요"
# 부모 클래스 메서드는 출력하지 않는다.
  • super를 사용하면 호출이 가능하다.
class Parent:
    def hi(self):
        print("하이")
        
class Child(Parent):
    def hi(self):
        super().hi()
        print("안녕하세요")
        
a = Child()
a.hi()
# "하이"
# "안녕하세요"
# 부모 클래스 메서드는 출력하지 않는다.

 

 

다형성(Polymorphism)

  • 같은 모양의 코드가 다른 동작을 하는 것.
  • 객체 지향 프로그래밍에서 가장 중요한 개념 중 하나
class Music:
    def Ready(self):
        print("연주 시작")

class Piano(Music):
    def Play(self):
        print("피아노 연주 중")

class Drum(Music):
    def Play(self):
        print("드럼 연주 중")

band = list()
band.append(Piano())
band.append(Drum())

for member in band:
    band.Ready()
# 연주 시작
    
for member in band:   # 같은 Play 메서드여도 각각 다르게 출력한다.
    member.Play()
# 피아노 연주 중
# 드럼 연주 중