[解決済み] __init__.py で定義されたクラスをインポートする方法
2022-08-17 20:54:30
質問
私は自分自身の使用のためにいくつかのモジュールを整理しようとしています。私はこのようなものを持っています。
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
で
lib/__init__.py
で、libをインポートする際に使用するクラスを定義したいと思います。しかし、私はクラスをファイルに分離することなしにそれを理解することができないようです。
__init__.py
.
と言うよりも
lib/
__init__.py
settings.py
helperclass.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
こんな感じでお願いします。
lib/
__init__.py #Helper defined in this file
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib import Helper
可能でしょうか、それともクラスを別のファイルに分けなければならないのでしょうか?
EDIT
OK、他のスクリプトからlibをインポートすると、Helperクラスにアクセスできます。どうすればsettings.pyからHelperクラスにアクセスできるのでしょうか?
例として はこちら は、パッケージ内参照について説明しています。私は "サブモジュールはしばしばお互いを参照する必要がある" を引用しています。私の場合、 lib.settings.py は Helper を必要とし、 lib.foo.someobject は Helper にアクセスする必要があります。
どのように解決するのですか?
-
'
lib/
の親ディレクトリは、必ずsys.path
. -
あなたの'
lib/__init__.py
はこのようになります。from . import settings # or just 'import settings' on old Python versions class Helper(object): pass
そうすると、以下の例のようになるはずです。
from lib.settings import Values
from lib import Helper
編集後の回答
__init__.py
は、あなたのパッケージが外からどのように見えるかを定義します。もし
Helper
の中で
settings.py
を定義すると
Helper
を別のファイルで定義します。例えば、'
lib/helper.py
'.
. |-- import_submodule.py `-- lib |-- __init__.py |-- foo |-- __init__.py |-- someobject.py |-- helper.py `-- settings.py 2つのディレクトリ、6つのファイル
コマンドです。
$ python import_submodule.py
出力します。
settings
helper
Helper in lib.settings
someobject
Helper in lib.foo.someobject
# ./import_submodule.py
import fnmatch, os
from lib.settings import Values
from lib import Helper
print
for root, dirs, files in os.walk('.'):
for f in fnmatch.filter(files, '*.py'):
print "# %s/%s" % (os.path.basename(root), f)
print open(os.path.join(root, f)).read()
print
# lib/helper.py
print 'helper'
class Helper(object):
def __init__(self, module_name):
print "Helper in", module_name
# lib/settings.py
print "settings"
import helper
class Values(object):
pass
helper.Helper(__name__)
# lib/__init__.py
#from __future__ import absolute_import
import settings, foo.someobject, helper
Helper = helper.Helper
# foo/someobject.py
print "someobject"
from .. import helper
helper.Helper(__name__)
# foo/__init__.py
import someobject
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] __init__.py は何のためにあるのですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] Djangoで2つの日付の間を選択する
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Pythonの検索パスを他のソースに展開する
最新
-
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のデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] Cythonのコードを含むPythonパッケージはどのように構成すればよいのでしょうか?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Pythonの辞書にあるスレッドセーフについて