PYTHON · 함수
콜러블 객체
__call__ 메서드를 구현하여 인스턴스를 함수처럼 호출할 수 있게 만듭니다.
함수중급__call__callable콜러블함수 객체
핵심 설명
__call__ 메서드를 구현하여 인스턴스를 함수처럼 호출할 수 있게 만듭니다.
Python code
class Multiplier:
"""상태를 가진 콜러블"""
def __init__(self, factor: int):
self.factor = factor
self.call_count = 0
def __call__(self, value):
self.call_count += 1
return value * self.factor
double = Multiplier(2)
triple = Multiplier(3)
print(double(5)) # 10
print(triple(5)) # 15
print(f"호출 횟수: {double.call_count}") # 1
# 함수처럼 사용
numbers = [1, 2, 3, 4, 5]
print(list(map(double, numbers))) # [2, 4, 6, 8, 10]
# callable() 확인
print(callable(double)) # True
print(callable(42)) # False
# 설정 가능한 밸리데이터
class RangeValidator:
def __init__(self, min_val, max_val):
self.min_val = min_val
self.max_val = max_val
def __call__(self, value):
if not self.min_val <= value <= self.max_val:
raise ValueError(f"{value}은 {self.min_val}-{self.max_val} 범위 밖")
return value
validate_age = RangeValidator(0, 150)
print(validate_age(25)) # 25학습 팁
콜러블 객체는 상태가 있는 함수가 필요할 때 클로저의 대안으로 사용할 수 있습니다.
주의할 점
__call__을 정의하지 않은 객체를 호출하면 TypeError: object is not callable이 발생합니다.
자주 묻는 질문
콜러블 객체란 무엇인가요?
__call__ 메서드를 구현하여 인스턴스를 함수처럼 호출할 수 있게 만듭니다.
콜러블 객체 학습 시 주의할 점은 무엇인가요?
__call__ 을 정의하지 않은 객체를 호출하면 TypeError: object is not callable 이 발생합니다.