인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

dooooh2님의 프로필 이미지
dooooh2

작성한 질문수

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

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

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

작성

·

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

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

dooooh2님의 프로필 이미지
dooooh2

작성한 질문수

질문하기