프로그래밍 언어/Python

[Python] Instance의 Import에 관한 글

바보1 2022. 11. 22. 23:09

모듈, 클래스를 import 하는 방법은 구글에 검색하면 많이 나오니까 따로 정리는 안 하겠습니다.

신기한 사실을 하나 발견했는데, 바로 Class로부터 생성된 Instance도 Import 할 수 있다! 입니다.

 

우선 Class를 하나 만들어봅시다.

# test1.py
class Hello():
    def __init__(self, name):
        self.name = name

    def print_hello(self):
        print(f'have a good day {self.name}')

instance = Hello('woo')
instance.print_hello()
>>> have a good day woo

출력은 역시 예상한 대로 나오네요

 

그렇다면 다른 파일에서 해당 instance를 import 해봅시다.

파일 구조는 다음과 같습니다.

 

study

 ㄴ test1.py

 ㄴ test2.py

 

그냥 test 1.py랑 test2.py가 같은 디렉토리 안에 있다고 보시면 됩니다.

 

아무튼 test2.py의 내용은 다음과 같습니다.

# test2.py
from test1 import instance

instance.print_hello()

이를 실행하면,

>>> have a good day woo
>>> have a good day woo

test1.py의 instance를 가져온 것도 모자라서 test1.py의 내용을 실행합니다.

 

음..

test2.py를 실행하면 import 하는 과정에서 test1.py를 실행하고, 

거기서 생성된 instance를 가지고 온다는 것을 알 수 있겠네요.

 

그럼 이제 다른 걸 확인해봅시다.

test1.py에서 instance와 연관된 코드만 실행하는지, 아니면 진짜로 전체를 실행하는지에 대해 확인합시다.

 

test1.py와 test2.py의 코드는 아래와 같습니다.

# test1.py
class Hello():
    def __init__(self, name):
        self.name = name

    def print_hello(self):
        print(f'have a good day {self.name}')

instance = Hello('woo')

print('hihi')
# test2.py
from test1 import instance

test2.py의 실행 결과를 봅시다.

>>> hihi

그냥 test1.py의 전체를 실행하나 봅니다.

 

추가적으로 test1.py에 무한루프를 돌게 설정하고, test2.py에는 아무거나 출력하게 만들어 봤습니다.

test1.py는 무한루프에 갇히고, test2.py에 있는 출력문은 출력되지 않습니다.

 

또한 test1.py와 test2.py의 instance ID를 확인했는데, 둘이 동일한 객체임도 확인했습니다.

 

결론적으로 다른 파일의 instance를 import 하면 다른 파일의 코드를 전부 실행하고, 그 결과로 instance를 가지고 온다!

가 되겠습니다.