작성
·
165
0
# 공중 공격 유닛 클래스 (다중 상속 받음)
class FlyableAttackUnit(AttackUnit, Flyable):
def __init__(self, name, hp, damage, flying_speed):
AttackUnit.__init__(self, name, hp, 0, damage) # 지상 speed 0
Flyable.__init__(self, flying_speed)
def move(self, location): # move 함수 재정의 (오버라이딩)
print("[공중 유닛 이동]")
self.fly(self.name, location)
# 레이스
class Wraith(FlyableAttackUnit):
def __init__(self):
FlyableAttackUnit.__init__("레이스", 80, 20, 5)
self.clocked = False # 클로킹 모드 (해제 상태)
def clocking(self):
# 클로킹 모드 -> 모드 해제
if self.clocked == True:
print("{0}: 클로킹 모드 해제합니다.".format(self.name))
self.clocked = False
# 클로킹 모드 해제 -> 모드 설정
else:
print("{0}: 클로킹 모드 설정합니다.".format(self.name))
self.clocked = True
FlyableAttackUnit 클래스나 다른 클래스에서는
class FlyableAttackUnit(AttackUnit, Flyable):
def __init__(self, name, hp, damage, flying_speed):
AttackUnit.__init__(self, name, hp, 0, damage) # 지상 speed 0
Flyable.__init__(self, flying_speed)
이렇게 부모 클래스 생성자를 호출(?)할 때 꼬박꼬박 self
를 넣어주는데
왜 Wraith 클래스만
class Wraith(FlyableAttackUnit):
def __init__(self):
FlyableAttackUnit.__init__("레이스", 80, 20, 5)
이렇게 부모 클래스 생성자를 호출(?)하면서 왜 파라미터로 self
를 넣어주지 않는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
dooooth2님, 파이썬의 클래스 상속에서 부모 클래스의 생성자를 호출할 때 self
를 명시하지 않는 것은 오류입니다.
클래스 내의 메서드에서 첫 번째 매개변수인 self
는 해당 인스턴스 객체를 가리키며, 상속받는 자식 클래스에서 부모 클래스의 메서드를 호출할 때도 self
를 포함하여 호출해야 합니다. 예를 들어 Wraith
클래스에서 부모 클래스인 FlyableAttackUnit
의 생성자를 올바르게 호출하기 위해서는 아래와 같이 수정해야 합니다.
class Wraith(FlyableAttackUnit):
def __init__(self):
FlyableAttackUnit.__init__(self, "레이스", 80, 20, 5)
self.clocked = False # 클로킹 모드 (해제 상태)
위 코드에서 FlyableAttackUnit.__init__(self, "레이스", 80, 20, 5)
부분에서 self
를 첫 번째 파라미터로 넘겨줌으로써 FlyableAttackUnit
생성자에 현재 Wraith
인스턴스를 전달하는 것입니다. 이렇게 self
를 포함하여 부모 클래스의 생성자를 호출해야 해당 인스턴스에 부모 클래스의 속성들이 올바르게 설정됩니다.
코드에 대한 질문이나 프로그래밍 학습에 대해 더 궁금한 점이 있다면 언제든지 질문해 주세요.