매직 메서드 - 숫자 표현
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__
의 우선순위
__bool__
메서드 호출
__len__
메서드 호출 (위 메서드가 없는 경우)
- 항상 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도 {"packages":["numpy","pandas","matplotlib","lxml"]}