PHpullh

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 이 발생합니다.