강의로 돌아가기
박현병

super()에서 인자수 오류입니다!

안녕하세요?

클래스를 상속받아서 init()을 오버라이드 시키고, 다시 부모클래스의 init()을 쓰려는데 에러가 발생합니다.

원인을 모르겠습니다.

Traceback:
, in
, in init
TypeError: init() takes 2 positional arguments but 3 were given

작성중인 코드―super
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Car():

    def __init__(self, name):
        self.name = name

    def run(self):
        print("차가 달립니다.")


class Truck(Car):
    # 이 아래에서 __init__ 메소드를 오버라이드 하세요.
    def __init__(self, name, capacity):
        super().__init__(self,name)
        self.capacity = capacity
    def load(self):
        print("짐을 실었습니다.")
2 개의 답변
Demi

TypeError: init() takes 2 positional arguments but 3 were given

는 init에 인자를 너무 많이 넣었다는 뜻입니다.

super().__init__(self,name)super.__init__(name)으로 바꾸세요.

  • 박현병
    감사합니다! super().__init__(name)을 쓸때는 name만 쓰고, Car().__init__(self, name)일 경우는 self, name을 동시에 써야 하는데 이 차이가 왜 발생하는지 여쭤봐도 될까욤? 박현병 2017.08.18 11:24
Demi
  1. 자신의 메소드를 구현할 때는 def func_name(self, param..):과 같이 self를 명시해야 합니다.
  2. class의 멤버함수를 class내에서 사용할 땐 self.func_name과 같이 사용합니다.
  3. 다른 class의 함수를 사용할 떄에는 self를 붙이지 않습니다.

예를 들어

class Myclass:
    def __init__(self): #Myclass의 init 함수를 구현하기에, 인자로 self를 붙입니다.
        super.__init__() # super class의 init 함수를 호출하기에, self를 쓰지 않습니다.


    def myfunc1(self): # Myclass의 myfunc1 함수를 구현하기에, 인자로 self를 붙입니다.
        pass

    def myfunc2(self):# Myclass의 myfunc2 함수를 구현하기에, 인자로 self를 붙입니다.
        self.myfunc1() # Myclass의 멤버함수 myfunc1을 호출하기에, self.myfunc1을 붙입니다.
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.