본문 바로가기
카테고리 없음

[Python] 파이썬 - 17. __inti__과 __call__의 차이

by Hoody Coder 2025. 3. 29.

1. __init__: 객체 초기화 메서드

  • 객체가 생성될 때(__new__ 호출 후) 자동으로 실행된다.
  • 주로 인스턴스 변수 초기화에 사용됩니다.
  • return값이 없어 None을 반환한다. 
class Example:
    def __init__(self, name):
        print(f"__init__ 호출: {name}")
        self.name = name

obj = Example("michael")  # 객체 생성 시 __init__ 호출
# 출력: __init__ 호출: michael

 

 

2. __call__: 객체를 함수처럼 호출 가능하게 만드는 메서드

  • 인스턴스가 함수처럼 사용될 때 실행된다
  •  __call__을 정의하면 객체를 마치 함수처럼 사용할 수 있다. 
class Example:
    def __init__(self, name):
        self.name = name

    def __call__(self, greeting):
        return f"{greeting}, {self.name}!"

obj = Example("michael")  # 객체 생성
print(obj("Hello"))  # __call__ 호출
# 출력: Hello, michael!

 

📌 핵심 차이점

실행 시점 객체 생성 시 실행 객체를 함수처럼 호출할 때 실행
역할 인스턴스 변수 초기화 객체를 함수처럼 동작하게 만듦
반환값 None 원하는 값을 반환 가능

 

 

Call 함수 활용 예제 1) 

class Multiplier:
    def __init__(self, factor):
        self.factor = factor

    def __call__(self, value):
        return self.factor * value

double = Multiplier(2)  # 객체 생성
print(double(10))  # 20 (함수처럼 호출 가능)

 

__init__과 __call__ 을 함께 활용한 예제 )

class Greeting:
    def __init__(self, name):
        self.name = name

    def __call__(self, message):
        return f"{message}, {self.name}!"

greet = Greeting("Alice")  
print(greet("Good morning"))  # "Good morning, Alice!"
print(greet("How are you"))  # "How are you, Alice!"