작성
·
41
0
# 공중 공격 유닛 클래스
class FlyableAttackUnit(AttackUnit, Flyable):
def __init__(self, name, hp, damage, flying_speed):
AttackUnit.__init__(self, name, hp, 0, damage) # 지상스피드 0
Flyable.__init__(self, flying_speed)
def move(self, location) :
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
이렇게 따라서 작성하였는데, 실행하면
Traceback (most recent call last):
File "c:\Users\beatl\OneDrive\바탕 화면\파이썬 인강\Starcraft.py", line 114, in <module>
w1 = Wraith()
File "c:\Users\beatl\OneDrive\바탕 화면\파이썬 인강\Starcraft.py", line 83, in init
FlyableAttackUnit.__init__("레이스", 80, 20, 5)
~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
이렇게 오류가 납니다.
어디에서 잘못되었을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
Wraith
클래스의 __init__
메소드에서 FlyableAttackUnit.__init__()
를 호출할 때, self
매개변수가 누락된 것이 문제입니다. 모든 클래스 메소드에서 첫 번째 매개변수는 self
여야 합니다. 따라서 다음과 같이 수정해 주셔야 합니다:
# 레이스
class Wraith(FlyableAttackUnit):
def __init__(self):
FlyableAttackUnit.__init__(self, "레이스", 80, 20, 5) # self 추가
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
이제 self
를 __init__
호출에 추가하여 오류를 해결할 수 있습니다. self
는 현재 인스턴스를 가리키며, 인스턴스 메소드를 호출할 때 항상 첫 번째 매개변수로 전달해야 합니다.
질문 중에 아래와 같은 피드백을 받은 적이 있는 유사한 경우를 참조하실 수 있습니다.
- 생성자가 제대로 작동하지 않습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.