카테고리 없음

obj = super().__new__(cls, *args, **kwargs) return obj

명징직조지훈 2024. 8. 29. 10:22
class SomeClass:
    def __new__(cls, *args, **kwargs):
        print("Creating instance")
        obj = super().__new__(cls, *args, **kwargs)
        return obj

    def __init__(self, *args, **kwargs):
        print("Initializing instance")

# 객체 생성
instance = SomeClass()

print(instance)
>>>
Creating instance
Initializing instance
<__main__.SomeClass object at 0x000001DD9B930FE0>

인스턴스 생성 메서드 __new__,

항상 클래스 메서드로 첫 번째 인자로 클래스 자체를 받는다. 

반드시 객체를 반환,

 

부모 클래스의 new 메서드를 호출하여 새로운 인스턴스를 생성

cls 는 현재 클래스를 가리키며, 이 클래스의 인스턴스를 생성한다.

arg, kwargs 를 통해 추가적인 인자를 받아 부모 클래스의 new 메서드로 전달한다. 객체 생성 시 필요한 추가적인 매개변수를 전달할 수 있도록 한다.

obj 는 생성된 객체를 참조한 후 반환,

class Layer():
    
    def __new__(cls, *args, **kwargs):
        obj = super().__new__(cls, *args, **kwargs)
        
        # 추가적인 동작 수행

        return obj

keras 에선 build, quantize 를 여기서 수행

 

추가적인 정보를 담아야하거나 역할을 수행해야 하는 자식 클래스가 아닐 경우 기존의 파이썬 __new__ 가 실행되도록 오버라이드 ㄴㄴ