[解決済み] __init__.py へのコードの追加
質問
django のモデルシステムがどのように動作するか見ているのですが、 理解できないことに気づきました。
私は、空の
__init__.py
ファイルを作成して、カレントディレクトリがパッケージであることを指定することは知っています。 そして、ある変数を
__init__.py
に何らかの変数を設定することで、import * が正しく動作するようになります。
しかし、django は from ... import ... ステートメントを大量に追加し、クラスの一団を
__init__.py
. なぜでしょう? これでは、見た目が乱雑になるだけではありませんか? の中にこのコードが必要な理由があるのでしょうか?
__init__.py
?
どのように解決するのですか?
のすべてのインポートは
__init__.py
は、それを含むパッケージ(ディレクトリ)をインポートすると利用できるようになります。
例
./dir/__init__.py
:
import something
./test.py
:
import dir
# can now use dir.something
EDIT: 言い忘れていましたが、このコードは
__init__.py
のコードは、そのディレクトリからモジュールをインポートしたときに初めて実行されます。ですから、通常パッケージレベルの初期化コードを置くには良い場所です。
EDIT2: dgrant が私の例の混乱の可能性を指摘してくれました。この例では
__init__.py
import something
は、パッケージからでなくても、任意のモジュールをインポートすることができます。例えば、次のように置き換えることができます。
import datetime
と置き換えることができ、トップレベルでは
test.py
の両方が動作します。
import dir
print dir.datetime.datetime.now()
と
import dir.some_module_in_dir
print dir.datetime.datetime.now()
要するに
__init__.py
で割り当てられたすべての名前は、インポートされたモジュール、関数、クラスであっても、パッケージやパッケージ内のモジュールをインポートするたびに、パッケージの名前空間で自動的に利用できるようになります。
関連
-
[解決済み] __init__.py でも「非パッケージで相対的なインポートを試みた」を修正する方法
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] init__と__call__の違いは何ですか?
-
[解決済み] Pythonで'super'は何をするのですか?- super().__init__() と明示的なスーパークラス __init__() の違い
-
[解決済み] なぜ __init__() は常に __new__() の後に呼び出されるのですか?
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複