> 백엔드 개발 > 파이썬 튜토리얼 > Python의 매직 메소드

Python의 매직 메소드

Patricia Arquette
풀어 주다: 2024-12-31 09:03:14
원래의
434명이 탐색했습니다.

Python

1 -> __new__(cls) 메서드

__new__ 메소드는 Python에서 새 객체가 생성될 때 호출됩니다. 클래스의 새 인스턴스를 생성하고 반환하는 일을 담당합니다. 이 방법은 일반적으로 싱글톤 패턴, 캐싱 또는 메모리 관리객체 생성을 사용자 정의

하려는 경우에 사용됩니다.

__new__는 언제 호출되나요?

__new__ 메소드는 __init__ 전에 호출되며 새 객체를 생성하는 데 사용됩니다. 새 객체를 생성할 때 일반적인 이벤트 순서는 다음과 같습니다.

  1. __new__: 객체를 생성합니다(메모리 할당).
  2. __init__: 객체를 초기화합니다(속성 설정).

__new__ 사용 사례:

  1. 싱글턴 패턴: 싱글톤 패턴은 클래스의 인스턴스가 하나만 존재하도록 보장합니다. 이 경우 __new__는 새 인스턴스를 만드는 대신 인스턴스가 이미 존재하는지 확인하고 이를 재사용합니다.
   class Singleton:
       _instance = None

       def __new__(cls):
           if cls._instance is None:
               cls._instance = super(Singleton, cls).__new__(cls)
           return cls._instance

   s1 = Singleton()
   s2 = Singleton()
   print(s1 is s2)  # True, both are the same instance
로그인 후 복사
  1. 객체 캐싱: 특정 조건에 따라 개체를 캐시하려는 경우 새 개체를 만들기 전에 __new__를 사용하여 개체가 이미 존재하는지(예: 사전에) 확인할 수 있습니다. 이는 메모리 사용을 최적화하는 데 도움이 될 수 있습니다.
   class CachedObject:
       _cache = {}

       def __new__(cls, value):
           if value in cls._cache:
               return cls._cache[value]
           obj = super().__new__(cls)
           cls._cache[value] = obj
           return obj

   obj1 = CachedObject("hello")
   obj2 = CachedObject("hello")
   print(obj1 is obj2)  # True, the same object is reused
로그인 후 복사
  1. 메모리 관리:
    객체의 메모리 할당을 제어하려는 경우(예: 메모리 사용량을 최적화하거나 큰 객체를 관리하기 위해) __new__를 사용하여 객체 생성 방법을 사용자 정의할 수 있습니다.

  2. 불변 객체:
    __new__는 종종 튜플이나 문자열과 같은 불변 객체와 함께 사용됩니다. 예를 들어, 변경할 수 없는 사용자 정의 객체를 생성하려면 __new__를 재정의하여 제대로 생성되었는지 확인해야 합니다.

   class MyTuple(tuple):
       def __new__(cls, *args):
           return super().__new__(cls, args)

   t = MyTuple(1, 2, 3)
   print(t)  # (1, 2, 3)
로그인 후 복사

요약하면:

  • __new__는 객체가 생성될 때 호출되며 클래스의 인스턴스 반환
  • 을 담당합니다.
  • 객체 생성 최적화, 싱글톤과 같은 패턴 구현, 객체 캐싱 관리 또는 메모리 할당 사용자 정의에 유용합니다. 프로세스입니다.

위 내용은 Python의 매직 메소드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿