본문 바로가기

매직 메서드 - 숫자 표현

1. __abs__ 메서드

__abs__ 메서드는 내장 함수 abs()가 호출될 때 실행됩니다. 객체의 절대값을 정의할 때 사용합니다.

class Number:
    def __init__(self, value):
        self.value = value
    
    def __abs__(self):
        return abs(self.value)

num = Number(-5)
print(abs(num))  # 출력: 5

2. __bool__ 메서드

__bool__ 메서드는 객체의 참/거짓을 판단할 때 사용합니다. if 문이나 bool() 함수에서 호출됩니다.

class Number:
    def __init__(self, value):
        self.value = value
    
    def __bool__(self):
        return self.value != 0

num = Number(0)
print(bool(num))  # 출력: False

2.1 __bool__의 우선순위

  1. __bool__ 메서드 호출
  2. __len__ 메서드 호출 (위 메서드가 없는 경우)
  3. 항상 True 반환 (위 메서드들이 모두 없는 경우)
class Collection:
    def __init__(self, items):
        self.items = items
    
    def __len__(self):
        return len(self.items)

coll = Collection([])
print(bool(coll))  # 출력: False (빈 컬렉션)

3. __int__, __float__ 메서드

이 메서드들은 객체를 숫자로 변환할 때 사용됩니다. int(), float() 함수 호출 시 실행됩니다.

class Score:
    def __init__(self, value):
        self.value = value
    
    def __int__(self):
        return int(self.value)
    
    def __float__(self):
        return float(self.value)

score = Score(85.5)
print(int(score))    # 출력: 85
print(float(score))  # 출력: 85.5

4. 실제 활용 예시

숫자 관련 매직메서드들은 수학적 개념을 표현하는 클래스를 만들 때 유용합니다.

class Temperature:
    def __init__(self, celsius):
        self.celsius = celsius
    
    def __float__(self):
        return float(self.celsius)
    
    def __bool__(self):
        return self.celsius > 0
    
    def __abs__(self):
        return abs(self.celsius)

temp = Temperature(-5)
print(f"영상입니까? {bool(temp)}")  # False
print(f"온도 차이: {abs(temp)}도")   # 5도
print(f"섭씨: {float(temp)}도")     # -5.0도