클래스에서도 이름을 직접 적지 않고도 부모 클래스에 접근하는 방법이 있습니다. 바로 이번에 배울 super()입니다. super()는 상속하는 부모 클래스의 메서드를 사용할 때 필요합니다.
앞의 코드를 다음과 같이 수정하면 동일한 동작을 수행합니다. 단, super()를 사용하는 문장에서는 self를 함께 사용하지 않으니 이 점을 주의해야 합니다.
class BuildingUnit(Unit):
def __init__(self, name, hp, location):
# Unit.__init__(self, name, hp, 0) # 지상 이동 속도 0, 건물은 지상 이동 불가
super().__init__(name, hp, 0) # 부모 클래스 접근, self 없이 사용
self.location = location
하지만 부모 클래스를 2개 이상 상속하는 다중 상속일 때는 어떨까요? 비교해 보기 위해 새로운 파이썬 파일(super.py)을 하나 만들어서 다음과 같이 코드를 작성합니다.
super.py
class Unit:
def __init__(self):
print("Unit 생성자")
class Flyable:
def __init__(self):
print("Flyable 생성자")
class FlyableUnit(Unit, Flyable):
def __init__(self):
super().__init__()
# 수송선
troopship = FlyableUnit()