2017-08-14 8 views
0

私の質問はPythonの恥の殿堂に私を連れてこないことを願っています。Python3:パッケージレベルでの便利なモジュールのエクスポート方法

とにかく、私はパッケージpooに現在1つのモジュールmooしか含まれていません。将来、poo(例えば、poo.moose)の内部に追加のモジュールが存在する可能性があります。 mooは主な使用モジュールの一種であり、のすべてのものを手に入れて、poo、パッケージをインポートしたとします。私(と私のパッケージユーザー)はimport poo.mooimport poo.moo as moo、(気絶!)import poo.*を避けたいです。あなたが知っているように、省エネは良いことです。

ので(完全に正しい方法でオフ願わくばではありません)私の考えは__init.py__で、pooをパッケージ化するモジュールpoo.mooの「輸出」(関数、変数、クラス、...)をコピーすることです。私はpooの既存の定義を上書きしたくないです。

これを達成するための正しい、適切な、適切かつ効率的な方法は何ですか? (私は「理想」を使ったのですか?)それとも悪い考えですか?それとも、まったく異なる何かのために、この非常に盛んなPythonが "...そして今、何かの意味で"ですか? ;)

私のパッケージはPython3のみです。

In python, how do you import all classes from another module without keeping the imported module's namespace?は答えがありますが、これはPythonパッケージの__init__.pyコードにどうやって当てはまるのか理解できませんでした。この理由から、私の詳細な答えは以下のようなものです。

+0

[Pythonでは、インポートされたモジュールの名前空間を保持せずに、ほかのモジュールからすべてのクラスをどのようにインポートするのですか?](https://stackoverflow.com/questions/11980062/in-python-how-do-you- import-all-classes-from-another-module-without-keeping-the) – ppperry

+0

@ppperry残念ながら、 'from x import * as *'はPython3では動作しません。 – TheDiveO

+0

'as * 'を削除してください。 – ppperry

答えて

1

本当に簡単です。

from poo.moo import * 

それだ:単にパッケージの名前空間へのモジュールのこの(絶対)インポートを行うpoo/__init__.pyパッケージで。今すぐ​​がある場合は、poo.a()としてアクセスできるようになります。

poo.moo.version=42poo.version=13を上書きしませんので、(サブ)モジュールのインポートによってパッケージ定義が上書きされないことに注意してください。正確に何が必要です。

私はまだ、インポートがモジュールにプライベートなままである他のモジュール化された言語に惑わされていることに気付きました。しかし、Pythonではすべてが見やすいので、パッケージインポートもモジュール/パッケージにあります。

関連する問題