inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 무료 강의 (기본편) - 6시간 뒤면 나도 개발자

스타크래프트 프로젝트 전반전

왜 Wraith 클래스에서 부모 클래스 호출할 때 왜 self가 안 들어가나요?

249

dooooh2

작성한 질문수 7

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를 넣어주지 않는지 궁금합니다.

 

 

python

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 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를 포함하여 부모 클래스의 생성자를 호출해야 해당 인스턴스에 부모 클래스의 속성들이 올바르게 설정됩니다.

코드에 대한 질문이나 프로그래밍 학습에 대해 더 궁금한 점이 있다면 언제든지 질문해 주세요.

quiz 8 오류 문제

0

71

1

str() 작성 위치

0

53

1

아나콘다

0

61

1

윈도우 설치 도와주세요

0

75

1

std_weight함수에서weight만return가능한가요?

0

69

1

오른쪽위 실행버튼을 누르면 터미널에 에러가 뜨고 컨트롤+F5를 누르면 에러가 안뜹니다.

0

36

1

설치해서 시작하는데 문제가 있습니다.

0

70

1

함수 입력할 때 설명 툴팁 나오게 하려면 어떻게 하나요?

0

106

1

2장 환경설정 문의

0

76

1

스타크래프트 프로젝트

0

74

1

python 파일명.py 입력시 Python 출력

0

134

1

로드맵 질문있습니다!

0

86

2

오류

0

74

1

질문 있습니다.

0

77

1

블로그에 학습한 내용을 정리해도 괜찮을까요?

0

173

1

#퀴즈 3의 5번 질문

0

72

1

print("ㅋ"*5) 에 대한 결과가 도출되지 않습니다

0

81

1

가변인자의 위치가 중요한가요?

0

79

1

vscode옛날 버전 설치

0

223

1

글자색상이 선생님처럼 안나옵니다

0

186

1

슬프네

0

156

1

quiz 6번 관련 문의입니다.

0

130

1

퀴즈#3에 대해서 이렇게 작성해도 되나요?

0

196

1

피드백 부탁드립니다

0

93

1