Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 진리값(Truth Value) 테스트 완벽 가이드: __bool__과 __len__ 이해하기

파이썬 진리값 테스트란?

파이썬에서는 if 문이나 while 문에 조건을 넣어 어떤 객체든 진리값(truth value)을 테스트할 수 있습니다. 조건문 안에서 객체가 참인지 거짓인지 자동으로 판별되기 때문에, 별도의 비교 연산 없이도 간결하고 직관적인 코드를 작성할 수 있습니다.

객체가 속한 클래스에 __bool__() 메서드가 정의되어 False를 반환하거나, __len__() 메서드가 0을 반환하는 경우를 제외하면 해당 객체의 진리값은 기본적으로 True로 간주됩니다.

진리값 판정 규칙

  • 상수 중에서는 FalseNone만 거짓(False)으로 평가됩니다.

  • 변수에 담긴 값이 0, 0.0, Fraction(0, 1), Decimal(0), 0j처럼 수학적으로 '영'에 해당하면 거짓(False)으로 평가됩니다.

  • 빈 시퀀스나 빈 컬렉션, 즉 '', [], (), {}, set(), range(0) 등은 모두 진리값이 False입니다.

숫자 관점에서 보면 0은 False와, 1은 True와 동일하게 취급됩니다.

예제 코드

class A: # A 클래스에는 __bool__ 메서드가 없으므로 기본값인 True로 평가됩니다.
   def __init__(self):
      print('A 클래스입니다')

a_obj = A()

if a_obj:
   print('참(True)입니다')
else:
   print('거짓(False)입니다')

class B: # B 클래스는 __bool__ 메서드를 정의하여 False를 반환합니다.
   def __init__(self):
      print('B 클래스입니다')

   def __bool__(self):
      return False

b_obj = B()
if b_obj:
   print('참(True)입니다')
else:
   print('거짓(False)입니다')

myList = [] # 요소가 없으므로 False를 반환합니다.
if myList:
   print('요소가 있습니다')
else:
   print('요소가 없습니다')

myTuple = (10, 47, 84, 15) # 요소가 있으므로 True를 반환합니다.
if myTuple:
   print('요소가 있습니다')
else:
   print('요소가 없습니다')

실행 결과

A 클래스입니다
참(True)입니다
B 클래스입니다
거짓(False)입니다
요소가 없습니다
요소가 있습니다

핵심 정리

위 예제에서 볼 수 있듯이, __bool__ 메서드를 직접 정의하지 않은 클래스의 인스턴스는 항상 참(True)으로 평가됩니다. 반면 __bool__ 메서드가 False를 반환하도록 정의된 클래스의 인스턴스는 거짓(False)으로 평가됩니다.

또한 리스트나 튜플 같은 컬렉션 객체는 내부에 요소가 있는지 여부에 따라 진리값이 결정됩니다. 이러한 특성 덕분에 if not myList:처럼 요소의 존재 여부를 간단하게 확인할 수 있으며, 이는 파이썬에서 널리 사용되는 관용구(idiom)이기도 합니다.