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!"