python_class상속재정의

ssancho·2024년 4월 17일

python

목록 보기
20/26

클래스 상속 예시
부모 클래스와 자식 클래스 간의 관계를 더욱 직관적으로 이해할 수 있도록 예시를 들어보겠습니다.
자식 클래스로는 축구와 농구 팀 이름을 속성으로 갖는 클래스인 SoccerTeam 과 BasketballTeam 이 있다고 가정하겠습니다.

  1. 부모 클래스 생성

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}회 비겼습니다.")

  1. 자식 클래스 생성(상속)

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

  1. 자식 클래스 객체에서 상속받은 메서드 활용하기

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회 비겼습니다.

  1. 메서드 오버라이딩(method overriding)
    메서드 오버라이딩(method overriding)은 부모 클래스로부터 상속받은
    특정 메서드를 자식 클래스에서 재정의하는 작업을 의미합니다.

단, 주의하실 점은 메서드 오버라이딩을 활용하면 부모 클래스에서 정의한
메서드의 기능을 자식 클래스에서 재활용이 불가능하다는 점을 고려하셔야 합니다.
(단, 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회 연장전에 돌입했습니다.

  1. 슈퍼 함수(super)
    메서드 오버라이딩을 사용하면 부모 클래스에서 정의한 메서드의 기능을
    자식 클래스에서 사용할 수 없다고 했습니다.
    그럼에도 슈퍼(super) 함수는 부모 클래스 내 메서드를 자식 클래스에서 이용하면서
    동시에 필요한 부분만 재정의하여 사용할 수 있게 도와줍니다.
    사용 방법은 간단합니다. 자식 클래스에서 재정의한 메서드 내에
    "super().메서드 이름"와 같이 입력해 주면 됩니다.

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회 연장전에 돌입했습니다.

이처럼 슈퍼 함수를 활용하면 자식 클래스에서 오버라이딩이 발생하더라도
부모 클래스에서 정의한 메서드를 호출하여 정상적으로 활용할 수 있습니다.

profile
Ssancho

0개의 댓글