반응형
Python에서 객체를 생성할 때 __init__
메서드와 __new__
메서드는 중요한 역할을 합니다. 이 두 메서드는 객체 초기화 및 생성 과정에서 다르게 사용되며, 각각의 역할을 이해하는 것이 중요합니다.
__new__
메서드
- 역할: 객체의 메모리를 할당하고, 새 객체를 생성하는 역할을 합니다.
- 호출 시점: 클래스의 인스턴스가 생성될 때 가장 먼저 호출됩니다.
- 메서드 서명:
def __new__(cls, *args, **kwargs):
# 객체 생성 및 반환
- 주요 특징:
__new__
메서드는 클래스 메서드로,cls
를 첫 번째 인자로 받습니다. 이는 객체가 아닌 클래스를 가리킵니다.- 보통 부모 클래스의
__new__
메서드를 호출하여 실제로 객체를 생성합니다. - 만약
__new__
가 객체를 생성하지 않으면__init__
은 호출되지 않습니다.
- 예제:
class MyClass:
def __new__(cls, *args, **kwargs):
print("Creating instance of", cls)
instance = super().__new__(cls)
return instance
def __init__(self, name):
print("Initializing instance")
self.name = name
obj = MyClass("Example")
이 예제에서 __new__
는 먼저 호출되어 객체를 생성하고, 그 후에 __init__
이 호출되어 객체를 초기화합니다.
__init__
메서드
- 역할: 객체가 생성된 후 초기화하는 역할을 합니다.
- 호출 시점:
__new__
메서드가 객체를 생성한 이후에 자동으로 호출됩니다. - 메서드 서명:
def __init__(self, *args, **kwargs):
# 객체 초기화
- 주요 특징:
__init__
은 생성된 객체를 초기화하는 데 사용되며, 주로 객체의 속성을 설정합니다.- 이미 생성된 객체에 대해 추가적인 설정이나 초기화 작업을 수행하는 메서드입니다.
- 예제:
class MyClass:
def __init__(self, name):
print("Initializing instance")
self.name = name
obj = MyClass("Example")
print(obj.name) # "Example" 출력
요약
__new__
: 객체의 메모리를 할당하고, 실제 객체를 생성하는 메서드입니다. 보통 객체의 생성 과정을 제어할 때 재정의합니다.__init__
: 생성된 객체를 초기화하는 메서드로, 객체의 속성을 설정하는 등의 작업을 수행합니다.
이 두 메서드를 올바르게 이해하고 사용하는 것은 Python에서 객체 지향 프로그래밍을 다룰 때 매우 중요합니다. __new__
는 주로 immutable
객체나 singleton
패턴을 구현할 때 사용되며, __init__
은 일반적인 객체 초기화에 사용됩니다.
반응형