2017-03-22 15 views
0

デバッグ時にfrom module import *が便利です。しかし、それは公共の機能をインポートするように見えるだけです。 _で始まる関数はインポートされませんが、私はそのようにしたいと思います。インポート*でプライベート関数をインポートするには?

すべてのプライベート関数をインポートするにはどうすればよいですか?

編集 私はimport *は一般的に悪い習慣で十分に認識してんだけど、時々私は、緊急の生産の問題を特定して修正する必要があり、非常に重要な時間を節約できます対話的にデバッグするときimport *を使用します。

+4

解決方法は 'import *'を使わず、* module *をインポートしてから、 'module._foo'として必要なものを参照してください。 –

答えて

1

from module import *は、デフォルトではすべての公開の名前をインポートするだけです。どの名前をインポートするかを明示的に制御する必要がある場合は、モジュールのグローバルに名前(文字列として)からなる__all__シーケンスを指定します。あなたはそのリストにプライベート名を追加することができます。

__all__ = ['PublicClass', 'public_function', '_private_function'] 

しかし、より良い代替手段が全くfrom module import *を使用することではありません。兄弟モジュールのプライベートな名前に依存するコードは、明示的にそれらをインポートするだけです。

from module import *を使用すると、人の読者と静的コードチェッカーの両方でコードを検証するのがずっと難しくなるので、どの名前が読み込まれ、どの名前が読み込まれるのか判断できない欠けている。

+0

ありがとうございますが、ソースコードへの書き込みアクセス権がない場合はどうすればよいですか? – mchen

+0

@mchen:明示的なインポートを使用してください。 'from module import _private_name'です。 –

+0

@mchen:もしあなたが* '* module .__ all __'を設定することができますが、本当に面倒なインポート行を1つ追加しなければなりませんか? –

関連する問題