클래스 상속 예시
부모 클래스와 자식 클래스 간의 관계를 더욱 직관적으로 이해할 수 있도록 예시를 들어보겠습니다.
자식 클래스로는 축구와 농구 팀 이름을 속성으로 갖는 클래스인 SoccerTeam 과 BasketballTeam 이 있다고 가정하겠습니다.
class SportsTeam:
def init (self, team_name):
self.team_name= team_name
print(f"{self.team_name} 팀에 대한 정보입니다.")
def won(self, won):
print(f"{self.team_name} 팀은 {won}회 승리하였습니다.")
def loss(self, loss):
print(f"{self.team_name} 팀은 {loss}회 패배하였습니다.")
def draw(self, draw):
print(f"{self.team_name} 팀은 {draw}회 비겼습니다.")
class SoccerTeam(SportsTeam):
def init (self, team_name):
self.team_name = team_name
class BasketballTeam(SportsTeam):
def init (self, team_name):
self.team_name = team_name
mcfc = SoccerTeam('Manchester City FC')
mcfc.won(24)
mcfc.loss(4)
mcfc.draw(5)
lal = BasketballTeam('LA Lakers')
lal.won(35)
lal.loss(25)
lal.draw(2)
==> 출력결과
Manchester City FC 팀은 24회 승리하였습니다.
Manchester City FC 팀은 4회 패배하였습니다.
Manchester City FC 팀은 5회 비겼습니다.
LA Lakers 팀은 35회 승리하였습니다.
LA Lakers 팀은 25회 패배하였습니다
LA Lakers 팀은 2회 비겼습니다.
단, 주의하실 점은 메서드 오버라이딩을 활용하면 부모 클래스에서 정의한
메서드의 기능을 자식 클래스에서 재활용이 불가능하다는 점을 고려하셔야 합니다.
(단, super() 함수를 사용하여 활용 가능 . 아래부분에서 설명)
[오버라이딩 예시 - 연장전 재정의]
class BasketballTeam(SportsTeam):
def init (self, team_name):
self.team_name = team_name
def draw(self, draw):
print(f"{self.team_name} 팀은 {draw}회 연장전에 돌입했습니다.")
lal = BasketballTeam('LA Lakers')
lal.draw(2)
==> 출력결과
LA Lakers 팀은 2회 연장전에 돌입했습니다.
class BasketballTeam(SportsTeam):
def init (self, team_name):
self.team_name = team_name
def draw(self, draw):
super().work(draw)
print(f"{self.team_name} 팀은 {draw}회 연장전에 돌입했습니다.")
lal = BasketballTeam('LA Lakers')
lal.draw(2)
==> 출력결과
LA Lakers 팀은 2회 비겼습니다. # super()로 인해 부모클래스 메서드 호출 됨.
LA Lakers 팀은 2회 연장전에 돌입했습니다.
이처럼 슈퍼 함수를 활용하면 자식 클래스에서 오버라이딩이 발생하더라도
부모 클래스에서 정의한 메서드를 호출하여 정상적으로 활용할 수 있습니다.