Python

python) 상속 개념 super()란 뭘까

summerorange 2022. 12. 3. 19:15
반응형

클래스에서 상속 개념이 있는데, 상속 받을 때 super()를 반드시 호출해주어야 한다. 여기에서. 간단하게 매개변수들을 전달해주면 코드를 여러번 쓰지 않아도 줄일 수 있는 장점이 있다.

예를 들어 여기 정말 기본적인 계산기 기능을 담아서 계산기를 만들었다

class BasicCalculator:
  def __init__(self, *numbers):
    self.numbers = [number for number in numbers]

  def length(self):
    return len(self.numbers)

  def total(self):
    return sum(self.numbers)

  def average(self):
    return sum(self.numbers) / len(self.numbers)

여러 개의 숫자를 받아서, 해당 숫자가 몇 개인지, 합계는, 평균값을 계산해주는 메소드(method)를 만들었는데,

생각해보니 좀 더 추가 기능이 필요해서 고급계산기를 다시 만들었다.

그런데 이 고급계산기에 굳이.... 굳이 또다시 합계와 평균값을 구현해주어야 할까...

class AdvanceCalculator(BasicCalculator):

  def __init__(self, *numbers):
    super().__init__(*numbers) # 기존 클래스의 method를 사용 가능하도록 하기 위해서

다음과 같이 기본계산기의 클래스를 상속받아주면 

해당 method를 그대로 사용할 수 있다.

여기서 좀 더 나아가서...

이 고급 계산기에서는

합계가 0일 때는 합계가 0이라고만 출력하고 평균값을 계산해주지 않도록 설정한다고 할 때, (그저 예시 차원에서 만들어 뒀다 실제로는 저렇게 안 짬...그냥 설정해봤다)

위의 기본 계산기 기능을 상속 받아서 다음과 같이 super()로 처리해줄 수 있다.

class AdvanceCalculator(BasicCalculator):

  def __init__(self, *numbers):
    super().__init__(*numbers) # 기존 클래스의 method를 사용 가능하도록 하기 위해서

  def average(self):
    if super().total() == 0:
      print("합계가 0이니 평균값을 계산해주지 않겠습니다")
    else:
      return super().average()

당당히 자기 주장하는 계산기

상속 개념을 이해하기 쉽게 하기 위해서 이렇게 짜긴 했지만 

실제로는 저것보단 좀 더 다르게 짠다:)

포스팅 끗.

반응형