오류
2
7 asked
# 날 수 있는 기능을 가진 클래스
class Flyable:
def __init__(self, speed):
self.speed = speed
def Fly(self, name, location):
print(f"{name} : {location} 방향으로 날아갑니다. [속도: {self.speed}]")
class FlyableAttackUnit(AttackUnit, Flyable):
def __init__(self, name, hp, damage, speed):
AttackUnit.__init__(self, name, hp, damage)
Flyable.__init__(self, speed)
# 발키리: 공중 공격 유닛
valkyrie = FlyableAttackUnit("발키리", 200, 6, 5)
valkyrie.Fly(valkyrie.name, "3시")
Traceback (most recent call last):
File "c:\Users\Remnant\Desktop\0\PythonWorkspace\practice.py", line 78, in <module>
valkyrie = FlyableAttackUnit("발키리", 200, 6, 5)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Remnant\Desktop\0\PythonWorkspace\practice.py", line 73, in init
AttackUnit.__init__(self, name, hp, damage)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "c:\Users\Remnant\Desktop\0\PythonWorkspace\practice.py", line 40, in init
Unit.__init__(name, hp)
~~~~~~~~~~~~~^^^^^^^^^^
TypeError: Unit.__init__() missing 1 required positional argument: 'hp'
hp를 안 넣었다는데요
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. 제리스님
오류 원인은 FlyableAttackUnit이 아니라 AttackUnit.__init__() 내부에서 Unit.__init__()을 호출할 때 self를 전달하지 않았기 때문입니다.
현재 코드가 다음과 같이 되어 있는 것으로 보입니다.
Unit.__init__(name, hp)
파이썬에서 인스턴스 메서드를 직접 호출할 때는 첫 번째 인자로 객체 자신인 self를 전달해야 합니다.
Unit.__init__(self, name, hp)
따라서 AttackUnit 생성자를 다음처럼 수정해 주세요.
class AttackUnit(Unit):
def __init__(self, name, hp, damage):
Unit.__init__(self, name, hp)
self.damage = damage
self를 생략하면 name이 self 위치에 들어가고, hp가 name 위치에 들어가게 됩니다. 그 결과 실제 hp 인자가 전달되지 않아 아래와 같은 오류가 발생합니다.
TypeError: Unit.__init__() missing 1 required positional argument: 'hp'
다중 상속에서 각 부모 클래스의 생성자를 직접 호출하는 방식과 self 전달에 관한 유사한 질문은 아래 답변을 참고해 주세요.
다중상속시 멤버변수의 중복 호출문제
추가로 메서드 이름은 일반적으로 소문자로 작성하므로 Fly보다는 fly처럼 작성하는 것을 권장합니다.
class Flyable:
def __init__(self, speed):
self.speed = speed
def fly(self, name, location):
print(f"{name} : {location} 방향으로 날아갑니다. [속도: {self.speed}]")
호출할 때도 다음과 같이 사용합니다.
valkyrie.fly(valkyrie.name, "3시")
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
전 이렇게 풀었습니다
0
28
1
비만도까지 구하는 프로그램을 만들었습디나
0
47
1
키보드 단축키 알려주세요!
0
45
1
python.add에 대해서
0
74
1
변수의 문자열 출력문에 대해서 질문이 있습니다.
0
87
1
quiz 8 오류 문제
0
121
1
str() 작성 위치
0
104
1
아나콘다
0
122
1
윈도우 설치 도와주세요
0
147
1
std_weight함수에서weight만return가능한가요?
0
105
1
오른쪽위 실행버튼을 누르면 터미널에 에러가 뜨고 컨트롤+F5를 누르면 에러가 안뜹니다.
0
97
1
설치해서 시작하는데 문제가 있습니다.
0
134
1
함수 입력할 때 설명 툴팁 나오게 하려면 어떻게 하나요?
0
218
1
2장 환경설정 문의
0
154
1
스타크래프트 프로젝트
0
124
1
python 파일명.py 입력시 Python 출력
0
213
1
로드맵 질문있습니다!
0
152
2
오류
0
125
1
질문 있습니다.
0
119
1
블로그에 학습한 내용을 정리해도 괜찮을까요?
0
238
1
#퀴즈 3의 5번 질문
0
133
1
print("ㅋ"*5) 에 대한 결과가 도출되지 않습니다
0
125
1
가변인자의 위치가 중요한가요?
0
128
1
vscode옛날 버전 설치
0
292
1

