반응형
class test:
pass
t1 = test()
t2 = test()
print(t1)
print(t2)
간단한 test 클래스를 만들고,
t1 = test() 첫번째 테스트 객체 생성
t2 = test() 두번째 테스트 객체 생성
<__main__.test object at 0x030D28E0>
<__main__.test object at 0x030D28F8>
그 후, print 로 출력 해보니 할당된 주소가 나옵니다. 주소가 다르네요. 두개의 test 객체가 생성 되었습니다.
class test:
def __new__(cls, *args, **kwargs):
if not hasattr(cls, "_ins"):
print("CREATE TEST CLASS")
cls._ins = super().__new__(cls)
return cls._ins
t1 = test()
t2 = test()
print(t1)
print(t2)
__new__ 라는 메소드가 추가 되었습니다.
def __new__(cls, *args, **kwargs):
파이썬에서는 아래 __new__ 메소드에서 객체를 생성합니다. 보통은 알아서 __new__ 메소드를 생성하여 객체를 생성하지만 오버라이드를 통해 직접 객체 생성에 관여 할 수 있습니다.
if not hasattr(cls, "_ins"):
print("CREATE TEST CLASS")
cls._ins = super().__new__(cls)
return cls._ins
이부분이 중요합니다. _ins 라는 변수명이 있는지 확인 하여 없다면 객체생성을 하여 _ins 라는 변수에 저장합니다.
최초 생성시에는 _ins 를 선언하지 않았으니 당연히 객체 생성이 이루어 질것입니다.
하지만 두번째 부터는 이미 선언된 _ins 를 리턴만 할 것입니다.
<__main__.test object at 0x02E22B08>
<__main__.test object at 0x02E22B08>
그 후, print 로 출력 해보니 할당된 주소가 나옵니다. 주소가 같네요. 하나의 생성된 객체를 공유하고 있습니다.
반응형
'파이썬' 카테고리의 다른 글
작업중인 파이썬 프로젝트 패키지(모듈) 저장 파일 ( requirements.txt ) import/export 하는 방법 (0) | 2022.06.14 |
---|---|
time 에러 [AttributeError: module 'time' has no attribute 'clock'] (0) | 2022.06.12 |