[解決済み] Pythonで循環インポートを回避する方法は?[重複しています]。
2022-04-26 11:16:01
質問
Pythonにおける循環インポートの問題は、これまでにも何度も出てきていますし、私もこれらの議論を読んでいます。これらの議論の中で繰り返しなされるコメントは、循環インポートは悪い設計の兆候であり、循環インポートを避けるためにコードを再編成すべきであるということです。
このような場合、どうすれば循環インポートを回避できるか、どなたか教えていただけないでしょうか。2つのクラスがあり、それぞれのクラスにもう一方のクラスのインスタンスを取り、そのクラスのインスタンスを返すコンストラクタ(メソッド)を持たせたいと思っています。
具体的には、1つのクラスはミュータブルで、1つのクラスはイミュータブルです。イミュータブルクラスが必要なのは ハッシュ化、比較などのため。ミュータブルなクラスも何かするのに必要です。これはセットとフロジンセット、リストとタプルに似ている。
両方のクラス定義を同じモジュールに入れることもできるんだけど。他に何か提案はありますか?
おもちゃのような例ですが、リストという属性を持つクラスAとタプルという属性を持つクラスBがあるとします。そして、クラスAはクラスBのインスタンスを受け取り、クラスAのインスタンスを返すメソッドを持ち(タプルをリストに変換する)、同様にクラスBはクラスAのインスタンスを受け取り、クラスBのインスタンスを返すメソッドを持つ(リストをタプルに変換する)。
解決方法は?
モジュールをインポートするだけで、モジュールからインポートしないでください。
検討する
a.py
:
import b
class A:
def bar(self):
return b.B()
と
b.py
:
import a
class B:
def bar(self):
return a.A()
これは全く問題なく動作します。
関連
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
Python機械学習Githubが8.9Kstarsに達したモデルインタープリタLIME
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Python入門 openを使ったファイルの読み書きの方法
-
Python LeNetネットワークの説明とpytorchでの実装
-
Python 入出力と高次代入の基礎知識
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】Python - "ValueError: not enough values to unpack (expected 2, got 1)" の修正方法 [閉店].
-
[解決済み】AttributeError: 'module'オブジェクトには属性がありません。