__new__ 메소드는 Python에서 새 객체가 생성될 때 호출됩니다. 클래스의 새 인스턴스를 생성하고 반환하는 일을 담당합니다. 이 방법은 일반적으로 싱글톤 패턴, 캐싱 또는 메모리 관리 등 객체 생성을 사용자 정의
하려는 경우에 사용됩니다.__new__ 메소드는 __init__ 전에 호출되며 새 객체를 생성하는 데 사용됩니다. 새 객체를 생성할 때 일반적인 이벤트 순서는 다음과 같습니다.
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
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
메모리 관리:
객체의 메모리 할당을 제어하려는 경우(예: 메모리 사용량을 최적화하거나 큰 객체를 관리하기 위해) __new__를 사용하여 객체 생성 방법을 사용자 정의할 수 있습니다.
불변 객체:
__new__는 종종 튜플이나 문자열과 같은 불변 객체와 함께 사용됩니다. 예를 들어, 변경할 수 없는 사용자 정의 객체를 생성하려면 __new__를 재정의하여 제대로 생성되었는지 확인해야 합니다.
class MyTuple(tuple): def __new__(cls, *args): return super().__new__(cls, args) t = MyTuple(1, 2, 3) print(t) # (1, 2, 3)
위 내용은 Python의 매직 메소드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!