목적
.py를 사용할 때
1. 직접실행
2. 모듈로 import
3. init을 정리하기 위함
순서
I. 코드 구조
II. 직접 실행 vs 모듈 실행
III. class __init__
I. 코드 구조
python은 주로 다음과 같은 구조로 작성한다.
# I. 모듈 import
import ~~~ as ~~
from ~~ import ~~
# II. gloval variable 정의
var1 = 3;
var2 = "str";
# III. Class 정의
class myClass1:
# IV. 클래스 객체 생성 시 초기화부분
def __init__(self):
#V. 클래스 내 함수 선언
def myfunc(인자):
return
class myClass2(상속시 추가) :
def myfunc2(인자):
return
# VI. 실행 시 코드 작성
if __name__ == '__main__':
#mycode
이 구조에서 우리는 I. 과 VI.의 모듈 import, 실행시 코드(__name__)을 보고자 합니다.
II. 직접 실행 VS 모듈 실행
코드를 보면 __name__이 __main__일 때 실행되는 상황!!
그렇다면 먼저 __name__에 대해 확인 해보겠습니다.
__name__은 기본적으로 이름이 저장되는 변수입니다.
해당 코드를 직접 실행한 경우 | 외부에서 모듈로 import한 경우 | |
__name__ 변수에 저장되는 이름 | '__main__' | 해당 모듈의 파일 이름! |
예시코드
# Maintest1.py 함수라면
#직접 실행하면 이부분 실행
if(__name__ == '__main__') :
print("direct name : " , __name__) # __main__출력
# 다른 파일에서 import Maintest1 하면 이부분 실행
else :
print("module name : ", __name__) # Maintest1 출력
해당 프로그램이 불리게 되면 항상 저 if문을 거쳐 코드가 실행되게 됩니다.
초기 실행코드 라고 생각하면 됩니다.
초기 실행코드가 필요없다면 if문이 필요없겠죠??
위 코드의 주석 설명처럼 직접 실행하면 __name__변수가 __main__이므로
main함수가 되며 실행이되고
그렇지 않은경우(module import)에는 else문을 거치며 이후 코드가 실행됩니다.
+) __name__은 변수입니다.
따라서 코드 안에서 __name__ = 'hello' 처럼 임의로 변경도 가능합니다!!
III. class __init__
파일, 혹은 모듈의 실행은 이해가 끝났으니 __init__을 확인해보겠습니다.
보통 모듈안에 다수의 class들이 있고 각 class에서
"def __init__(self) : " 를 볼 수 있습니다.
필수는 아니지만
해당 코드의 의미는 Class 실행시 초기 실행 코드입니다.
프로그램을 실행할 때 if __name__==__main__을 통해
프로그램 실행 시 초기 실행 코드를 적은 것과 같이
class 객체를 처음 생성했을 때 실행되는 것입니다!
파일이름을 Class.py라고 한다면
class myclass:
def __init__(self):
print("myclass Inited")
if (__name__ == '__main__'):
class_obj = myclass()
else
print("Class imported")
출력
myclass Inited
외부 파일에서 import했을 때
if (__name__=='__main__'):
import Class
class_obj = Class.myclass()
출력
Class imported
myclass Inited
'Programming > Python' 카테고리의 다른 글
[Programming][Python] Pyqt Signal (2) | 2021.01.17 |
---|---|
[Programming][Python] Thread 생성방법 (0) | 2021.01.15 |
[Programming][Python]UI제작_Pyqt (0) | 2021.01.15 |
[Programming][Python] Anaconda, Pycharm 세팅, 명령어 (0) | 2021.01.11 |