본문 바로가기

카테고리 없음

[ Python ] 객체 생성시 __init__, __new__ 의 다른점 설명과 사용하기

반응형

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__은 일반적인 객체 초기화에 사용됩니다.

반응형