본문 바로가기
프로그래밍언어/파이썬[Error]

[파이썬][Error] 030. TypeError - unsupported operand type(s) for +: 'Custom' and 'Custom'

by about_IT 2025. 5. 27.
728x90

TypeError: unsupported operand type(s) for +: 'Custom' and 'Custom' 오류는 사용자 정의 클래스끼리 + 연산을 시도했지만, 해당 연산이 정의되어 있지 않을 때 발생합니다. 파이썬에서 +, -, * 등의 연산자는 내부적으로 해당 클래스의 특별 메서드(__add__, __sub__ 등)를 호출하여 동작합니다.

기본 내장 타입은 이러한 연산이 정의되어 있지만, 사용자 정의 클래스는 연산자 오버로딩을 하지 않는 이상 해당 연산이 불가능합니다. 이때 파이썬은 타입 간 연산이 불가능하다는 TypeError를 발생시킵니다.

● 오류 발생 예시

class Custom:
    def __init__(self, value):
        self.value = value

obj1 = Custom(10)
obj2 = Custom(20)
print(obj1 + obj2)

이 코드는 + 연산을 지원하지 않는 클래스이기 때문에 오류가 발생합니다.

TypeError: unsupported operand type(s) for +: 'Custom' and 'Custom'

● 해결 방법 - 연산자 오버로딩

class Custom:
    def __init__(self, value):
        self.value = value

    def __add__(self, other):
        return Custom(self.value + other.value)

    def __repr__(self):
        return "Custom({})".format(self.value)

obj1 = Custom(10)
obj2 = Custom(20)
print(obj1 + obj2)

__add__ 메서드를 정의하면 + 연산이 가능해지고, 결과로 새로운 Custom 객체를 반환할 수 있습니다.

● 자주 하는 실수

  • 클래스 정의 시 연산자 오버로딩을 생략
  • 내장 타입과 사용자 정의 클래스의 연산 정의 충돌
  • 비교 연산자나 산술 연산자에 대해 메서드 구현 누락

● 디버깅 팁

  • dir(객체)로 해당 클래스가 어떤 연산자를 지원하는지 확인
  • 필요한 연산자 메서드(__add__, __sub__ 등)를 명시적으로 정의
  • 출력 시 __repr__ 또는 __str__도 함께 구현

● 결론

TypeError - unsupported operand type(s) for + 오류는 연산자 오버로딩이 정의되지 않은 사용자 클래스 간에 연산을 시도했을 때 발생합니다. 클래스에 해당 연산자 메서드를 구현하여 원하는 연산 동작을 정의함으로써 이 오류를 해결할 수 있습니다.

728x90