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