Python Module&Package
Module
import
- 모듈을 임포트 할 수 있는 방법 ( 참고 )__name__
- entry point of moduleentry point
- file 실행 시작 파일pip list
pip show library
- 모듈 = 인메모리에 하나 존재하는 namespace
1
2
3
4
5
6
7
import module
from module import function
from module import ClassName
import sys
import os
from datetime import datetime
Package/moudles loading
sys.path
는 프로그램 setup 중에 초기화- python session에서 아래 코드와 같이 수정 가능
external package
들은 sys.path 안에site-packages directory
를 통해 가지고 있다.- aiirflow는 사용 중에 sys.path에 directory 추가
- dags folder
- config folder {AIRFLOW_HOME}/config
- plugins folder
- airflow version이 1이라면, webserver와 Dags 폴더를 공유
- unique한 package 이름을 사용해야합니다.
- 절대로 상대 경로로 Import하지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys
print(sys.path)
# result
['/usr/local/airflow/.local/bin',
'/usr/lib64/python37.zip',
'/usr/lib64/python3.7',
'/usr/lib64/python3.7/lib-dynload',
'/usr/local/airflow/.local/lib/python3.7/site-packages',
'/usr/lib64/python3.7/site-packages',
'/usr/lib/python3.7/site-packages',
'/usr/local/airflow/dags',
'/usr/local/airflow/config',
'/usr/local/airflow/plugins',
'/usr/local/airflow/dags/wclub']
- dag folder 내에
.airflowignore
파일을 추가하면 무시해야할 파일을 경로를 표현하여서 넣어주면 된다.(정규식 가능 )
1
2
3
# .airflowignore
test/packages/.*
test/custom_dags/base_dag\.py- u
Package
- Module들의 모음
- python 3.3 이하
__init__.py
필수 __all__
- package가 import할 module 모음-
Package의 내용을 가져올 때
import
keyword1
import <package.module>
Class
- 하나의 파일에 여러 클래스 선언이 가능하다. ( 모듈화 하여 사용한다면,, )
- Object의 구조 행동을 정의
class
keyword를 사용하여 새로운 클래스 작성- Python은
**Method Overloading**
이 없다. ( 같은 Method가 중복되어서 사용되면 첫번째는 무시된다 ) -
Class의 네이밍 컨벤션은 CamelCase
1 2 3
class Class_Test: def __init__(self, param): ...
-
외부에서 Class Import
1
from flight import Class_Test
-
생성자 = Object 생성하기
1
object_1 = Class_Test()
__new__
를 호출하여 Object 생성 할당-
__init__
를 호출하여 Object에서 사용할 초기값 초기화1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class Class_Test: def __init__(self): print('init') super().__init__() def __new__(cls): print('new') return super().__new__(cls) def number(self): return 123 test = Class_Test() > new init