Pythonベースモジュール、package、init、all
13944 ワード
module
モジュール(module)は、関数、変数、またはクラスを含むファイルです.
モジュールは他のPythonプログラムでロードして使用できます.他の開発者が作成したモジュールを使用するか、直接拡張できます.
開発者はプログラミング時に大量のモジュールを使用します.
例
# 파일명은 theater_module.py로 만들었습니다.
#일반 가격
def price(people):
print("{0}명 가격은 {1}원 입니다.".format(people, people * 10000))
#조조할인 가격
def price_morning(people):
print("{0}명 조조 할인 가격은 {1}원 입니다".format(people, people * 6000))
#군인 할인 가격
def price_soldier(people):
print("{0}명 군인 할인 가격은 {1}원 입니다.".format(people, people * 4000))
theater_module.pyを作成すると、ロードするファイルからロードされます.
いろんな方法で歌います
import theater_module
test.price(3) #3명이서 영화 보러 갔을 때 가격
test.price_morning(4) # 4명이서 조조 할인 영화 보러 갔을 때
test.price_soldier(5) # 5명의 군인이 영화 보러 갔을 때
> 3명 가격은 30000원 입니다.
> 4명 조조 할인 가격은 24000원 입니다
> 5명 군인 할인 가격은 20000원 입니다.
#두번째 예제 입니다.
import theater_module as tm
tm.price(3)
tm.price_morning(4)
tm.price_soldier(5)
> 3명 가격은 30000원 입니다.
> 4명 조조 할인 가격은 24000원 입니다
> 5명 군인 할인 가격은 20000원 입니다.
#세번째 예제 입니다.
from theater_module import *
#*의 뜻은 theater_module의 모든걸 사용하겠다는 의미입니다.
price_soldier(3)
price(2)
price_morning(5)
#혹은
#원하는 함수만 가져다가 사용할수 있습니다.
from theater_module import price, price_morning
price(5)
price_morning(2)
#마지막으로
from theater_module import price_morning as price
#요약하자면 theater_module에서 price_moring만 사용할것입니다. 그것의 별명은 price입니다. 여기서 price는 theater_module 속에있는 price함수가 아닙니다.
price(5)
package
Pythonでは、モジュールは1つです.パッケージとは、これらのモジュールを集約する集合です.Pythonのパッケージは、1つのディレクトリに配置されたモジュールのセットを指します.
まだちょっと(.)Pythonモジュールを階層(ディレクトリ構造)で管理できます.
例
例えば、旅行会社のプロジェクトを管理します.
まず新しいフォルダを作成します.travelという名前のフォルダにベトナムがありますpy, thailand.py, __init__
.pyという名前のフォルダを3つ作成__init__
.以下でpyを処理します.* 각 파일에 클래스 함수를 추가해주겠습니다.
# thailand.py
class ThailandPackage:
def detail(self):
print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야사징 투어) 50만원")
#vietnam.py
class VietnamPackage:
def detail(self):
print("[배트남 패키지 3박 5일] 다낭 효도 여행 60만원")
* 그리고 travel 패키지를 사용할 practice.py 라는 파일에서 실행해보겠습니다.
import travel.thailand
trip_to = travel.thailand.ThailandPackage()
trip_to.detail()
> [태국 패키지 3박 5일] 방콕, 파타야 여행 (야사징 투어) 50만원
# travel 패키시 속에 있는는 thailand모듈에 대한 ThailandPackage 클래스를 직접 사용해봤습니다.
#주의 할점은 import travel.뒤에올 이곳에는 항상 모듈이나 패키지만 올수있습니다.
즉 import travel.ThailandPackage은 사용이 불가능합니다.
하지만 from import에서는 사용이 가능합니다.
from travel.thailand import ThailandPackage
trip_to = ThailandPackage()
trip_to.detail()
> [태국 패키지 3박 5일] 방콕, 파타야 여행 (야사징 투어) 50만원
__init__ , __all__
* 각 파일에 클래스 함수를 추가해주겠습니다.
# thailand.py
class ThailandPackage:
def detail(self):
print("[태국 패키지 3박 5일] 방콕, 파타야 여행 (야사징 투어) 50만원")
#vietnam.py
class VietnamPackage:
def detail(self):
print("[배트남 패키지 3박 5일] 다낭 효도 여행 60만원")
* 그리고 travel 패키지를 사용할 practice.py 라는 파일에서 실행해보겠습니다.
import travel.thailand
trip_to = travel.thailand.ThailandPackage()
trip_to.detail()
> [태국 패키지 3박 5일] 방콕, 파타야 여행 (야사징 투어) 50만원
# travel 패키시 속에 있는는 thailand모듈에 대한 ThailandPackage 클래스를 직접 사용해봤습니다.
#주의 할점은 import travel.뒤에올 이곳에는 항상 모듈이나 패키지만 올수있습니다.
즉 import travel.ThailandPackage은 사용이 불가능합니다.
하지만 from import에서는 사용이 가능합니다.
from travel.thailand import ThailandPackage
trip_to = ThailandPackage()
trip_to.detail()
> [태국 패키지 3박 5일] 방콕, 파타야 여행 (야사징 투어) 50만원
__init__
が含まれている必要があります.pyという名前のファイルが存在します.このファイルの役割は、ディレクトリがパッケージの一部であることを示すことです.__init__
がある場合.pyファイルがない場合は、パッケージとして認識されません.__init__
です.pyがなくてもパッケージとして認識できますが、サブバージョンの互換性のために__init__
に変更されました.pyファイルを作成するのは安全な方法です.__init__
.pyファイルでは、リスト変数__all__
は重要な変数です.「from package name import*」文を使用すると、この変数にはパッケージ内のインポート可能なモジュールのリストが含まれます.つまり、__all__
に存在しないモジュールはインポートされず、エラーが発生しません.__init__
を次のようにインポートします.変数__all__
を設定およびインポートするためのモジュールをpyファイルに定義する必要があります.__all__
と定義されていない限り、認識できません.例
from travel import *
などのパケット名を書き込むと、*を使用するとエラーが発生します.from travel import *
trip_to = vietnam.VietnamPackage()
trip_to.detail()
> trip_to = vietnam.VietnamPackage()
NameError: name 'vietnam' is not defined
ツアーセットの__init__
.pyに入ったら__all__
を使用します.__all__ = ["모듈이름"]
#__init__ 모듈에서 작성해줍니다.
__all__ = ["vietnam"]
もう一度印刷してみると、正常に動作していることがわかります.from travel import *
trip_to = vietnam.VietnamPackage()
trip_to.detail()
> [배트남 패키지 3박 5일] 다낭 효도 여행 60만원
Reference
この問題について(Pythonベースモジュール、package、init、all), 我々は、より多くの情報をここで見つけました https://velog.io/@nodemon/Python-기초-module-package-init-allテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol