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

[파이썬][Error] 032. TypeError - '<' not supported between instances of 'Foo' and 'Foo'

by about_IT 2025. 5. 27.
728x90

TypeError: '<' not supported between instances of 'Foo' and 'Foo' 오류는 사용자 정의 클래스(Foo) 객체 간에 < 비교 연산자를 사용했지만, 해당 연산이 정의되어 있지 않은 경우 발생합니다. 파이썬은 내장 타입 간에는 <, >, == 등의 비교가 기본적으로 가능하지만, 사용자 정의 클래스는 명시적으로 비교 연산을 구현해야만 비교가 가능합니다.

이 오류는 주로 리스트 정렬(sort() 또는 sorted())을 시도하거나, min(), max() 함수 사용 시 발생합니다. 이러한 연산들은 내부적으로 < 비교 연산을 수행하기 때문에, 클래스에 해당 메서드가 정의되어 있지 않으면 오류가 발생하게 됩니다.

● 오류 발생 예시

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

f1 = Foo(1)
f2 = Foo(2)
print(f1 < f2)

이 코드는 < 연산이 정의되지 않은 상태에서 f1 < f2를 실행하여 오류가 발생합니다.

TypeError: '<' not supported between instances of 'Foo' and 'Foo'

● 해결 방법 - 비교 연산자 구현

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

    def __lt__(self, other):
        return self.value < other.value

f1 = Foo(1)
f2 = Foo(2)
print(f1 < f2)

__lt__ 메서드를 정의하면 < 연산이 가능해지며, 정렬 및 비교가 정상 작동합니다.

● 자주 하는 실수

  • 사용자 정의 클래스에 비교 연산자 구현을 생략
  • sorted()로 객체 리스트를 정렬하려 할 때 __lt__ 미구현
  • min(), max() 사용 시 클래스 비교 기준 미제공

● 디버깅 팁

  • 클래스에 __lt__, __eq__, __gt__ 등 연산자 오버로딩 여부 확인
  • functools.total_ordering 데코레이터로 비교 연산 일괄 정의 가능
  • 정렬 시 key 인자를 통해 비교 기준 지정 가능

● 결론

TypeError - '<' not supported between instances of 'Class' and 'Class' 오류는 클래스 간 비교 연산이 정의되지 않았기 때문에 발생합니다. 객체 간 정렬이나 비교를 위해서는 __lt__ 같은 비교 메서드를 직접 구현하거나, 정렬 함수에서 key를 지정해 비교 기준을 명시하는 것이 필요합니다.

728x90