히비스서커스의 블로그

[Python] TypeError: object.__init__() takes no parameters, TypeError: 'method' object is not subscriptable. 본문

Programming/Python

[Python] TypeError: object.__init__() takes no parameters, TypeError: 'method' object is not subscriptable.

HibisCircus 2022. 1. 7. 16:04
728x90

https://www.educba.com/overriding-in-python/

 

상황

메서드 오버라이딩 중 다음과 같은 에러가 발생하였다.

 

대략적인 코드

class Test:
    def __init__(self, base):
        self.base = base
        
    def add(self):
        self.base_100 = self.base + 100
        self.base_200 = self.base + 200
        return self.base_100, self.base_200
        
    def mul(self):
        raise NotImplementedError
        
class Test1(Test):
    def __init__(self, base):
        super(Test, self).__init__(
            base = base
        )
        
    def mul(self):
        self.base_mul = self.add[0] * self.add[1]
        return self.base_mul
a = 5
test1 = Test1(a)
test1.mul()

에러메시지

TypeError: object.__init__() takes no parameters.

 

원인 

Test1의 __init__ 의 super안에 파생클래스가 아닌 기반 클래스를 넣었기 때문.

 

해결방법

Test1의 __init__ 의 super안기반 클래스(Test)가 아닌 파생클래스(Test1)self를 넣어 현재 클래스가 어떤 클래스인지 명확하게 표시해줄 것

 

수정된 코드

class Test:
    def __init__(self, base):
        self.base = base
        
    def add(self):
        self.base_100 = self.base + 100
        self.base_200 = self.base + 200
        return self.base_100, self.base_200
        
    def mul(self):
        raise NotImplementedError
        
class Test1(Test):
    def __init__(self, base):
        # Test -> Test1
        super(Test1, self).__init__(
            base = base
        )
        
    def mul(self):
        self.base_mul = self.add[0] * self.add[1]
        return self.base_mul
a = 5
test1 = Test1(a)
test1.mul()

 

 

또 다른 메시지 발생

TypeError: 'method' object is not subscriptable.

 

원인 

파생 클래스 Test1의 mul 메서드 안에서 기반 클래스 Test의 add 메서드를 호출할 때 self.add()와 같이 괄호를 붙여주지 않았기 때문이다.

 

해결방법

파생 클래스 Test1의 mul 메서드 안에서 기반 클래스 Test의 add 메서드를 호출할 때 self.add()와 같이 괄호를 붙여주면 해결된다.

 

수정된 코드

class Test:
    def __init__(self, base):
        self.base = base
        
    def add(self):
        self.base_100 = self.base + 100
        self.base_200 = self.base + 200
        return self.base_100, self.base_200
        
    def mul(self):
        raise NotImplementedError
        
class Test1(Test):
    def __init__(self, base):
        super(Test1, self).__init__(
            base = base
        )
        
    def mul(self):
        self.base_mul = self.add()[0] * self.add()[1]
        return self.base_mul
a = 5
test1 = Test1(a)
test1.mul()
# 21525

 

잘 해결되었다.

 

 

 

-히비스서커스-

728x90