카테고리 없음
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__ 가 실행되도록 오버라이드 ㄴㄴ