inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

클래스 & 메소드 심화(2-2)

파이썬 클래스의 소멸자에 관한 질문입니다

307

작성자 없음

0

안녕하세요, 클래스 소멸자에 관한 더 깊은 내용이 궁금해서 구글링을 해 봤는데요

class Employee:
 
    def __init__(self):
        print('Employee created')

    def __del__(self):
        print("Destructor called")
 
def Create_obj():
    print('Making Object...')
    obj = Employee()
    print('function end...')
    return obj
 
print('Calling Create_obj() function...')
a = Create_obj()
print('Program End...')

다음과 같은 코드에서 의문점이 몇 가지 생겼습니다.

우선 위의 코드를 그대로 실행하면 

Calling Create_obj() function...

Making Object...

Employee created

function end...

Program End...

Destructor called

순으로 결과가 출력됩니다.

 

여기서 제가 궁금한 첫번째는 위의 코드에서

return obj

이 부분은 어떤 의미를 가지고 있는가 입니다.

obj라는 인스턴스를 생성한 후, return 한 것으로 보이는데, 정확히 어떤 기능을 하는 코드인지가 궁금합니다.

그리고, 위의 return obj

부분을 지운 후 코드를 실행하면

즉, 

class Employee:
 
    def __init__(self):
        print('Employee created')

    def __del__(self):
        print("Destructor called")
 
def Create_obj():
    print('Making Object...')
    obj = Employee()
    print('function end...')
 
print('Calling Create_obj() function...')
a = Create_obj()
print('Program End...')

다음의 코드를 실행하면 출력 결과가

Calling Create_obj() function...

Making Object...

Employee created

function end...

Destructor called

Program End...

이렇게 나오며 소멸자의 호출 순서가 달라지는 것을 확인할 수 있었습니다. 왜 소멸자의 호출 순서가 달라지는 것인지 그 이유가 궁금합니다.

 

 

python django

답변 1

0

좋은사람

해당 클래스 자기자신을 반환합니다.

세부적으로 설명하기 위해서는 아래 내용을 검색하셔서 클래스 생성 과정을

읽어보시기를 추천드려요.

파이썬 디스크립터, Type 함수를 사용한 클래스 생성 원리 등을

검색해 보시면 됩니다.

 

loop is not defined

0

54

1

가상환경 설정이 안됩니다

0

48

1

__le__, __ge__ 관련 질문

0

48

0

atom 서비스 종료

0

60

1

atom 서비스 종료

0

57

1

진도미확인 (진도가 안 넘어감)

0

87

1

RuntimeError: There is no current event loop in thread 'MainThread'

0

132

1

chapter 07-01 실행 오류

0

109

1

Chapter05-04 : sum_func의 합이 이중 출력됩니다.

0

123

2

45. 병렬성 2 - Futures(5-1) wait가 의도된 대로 동작하지 않습니다.

0

144

2

멀티스레딩 - 44. 병렬성 1 - Futures(4-2)

0

120

2

chapter05_02 클로저 질문사항 !

0

95

1

LV1 설정

0

129

2

매직 메소드의 호출 방법 차이 문의

0

180

2

왜 numbers리스트를 만들때 str으로 숫자를 감싸나요?

0

143

2

스크랩핑 실습 중 Mac OS 인증서 문제

0

166

1

AsyncIO 멀티 스크랩핑 실습 예제 관련 질문

0

208

1

강의자료가 영상과 다릅니다

0

293

2

closure.cell_contents 초기화 하기 문의

0

177

2

map함수 사용 시, list변환 방법 문의

0

393

2

__mul__ 백터 * 숫지, 백터 * 백터 처리

0

175

1

del처리후 질문입니다.

0

211

1

car_list(car1,car2,car3) 인스턴스 tuple 타입 문의

0

264

1

coroutine에 대한 질문

0

278

1