반응형
클래스에서 상속 개념이 있는데, 상속 받을 때 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()
상속 개념을 이해하기 쉽게 하기 위해서 이렇게 짜긴 했지만
실제로는 저것보단 좀 더 다르게 짠다:)
포스팅 끗.
반응형
'Python' 카테고리의 다른 글
special method, __add__ , __iadd__ (0) | 2022.12.04 |
---|---|
python list 요소를 string 형태로 변환하기 (0) | 2022.12.03 |
error) flask run - Could not locate a Flask application. (0) | 2022.12.03 |
온라인online 상에서 Jupyter Notebook을 사용하는 방법 (0) | 2022.11.15 |
에러해결 module 'string' has no attribute 'ascii_letters' (0) | 2022.10.14 |