17

A、A1、A2の3つのクラスを含む単一のPythonモジュールがあります。A1とA2はAから派生しています。AにはA1とA2を操作する関数が含まれています。

これは、1つの.pyファイルにある場合はすべて正常に機能します。しかし、そのファイルはかなり長くなっているので、A1とA2をそれぞれのファイルに分割したいと思います。循環依存にもかかわらず、このファイルを分割するにはどうすればよいですか?

4

3 に答える 3

12

modA.py:

class A(...):
   ...

modA1.py:

import modA
class A1(modA.A):
   ...

modA2.py:

import modA
class A2(modA.A):
   ...

modfull:

from modA import A
from modA1 import A1
from modA2 import A2

AがA1とA2を「処理」する場合でも、ダックタイピングのおかげで実際の名前をインポートする必要がないため、問題はありません。

于 2011-10-17T20:50:16.397 に答える
2

循環依存にもかかわらず、このファイルを分割するにはどうすればよいですか?

オプション1:サイクルを中断する:基本クラスを独自のモジュールに配置し、派生クラスを追加のモジュールに配置し、それらの派生クラスを操作する関数をさらに別のモジュールに配置します。


オプション2:サイクルを無視し、モジュール/パッケージのみをグローバル名前空間IEにインポートします。

foo.py

class Bar:
    "Frobs Quuxen"

としてインポートしないでください。必要に応じて関数でfrom foo import Bar使用import fooおよび参照してください。foo.Bar

于 2011-10-17T20:50:05.303 に答える
0

あなたの質問の核心はあなたが望まないということだと思います

a.py to imports a1
if
a1.py imports a.

ただし、Pythonではそれでまったく問題ありません。ただし、複数のモジュールを備えたシステムの関数/クラスの外部にコードがないことを確認してください。実行される順序は、インポートする場所、インポートするもの、月の満ち欠けによって異なるためです。 、など。

于 2011-10-17T20:47:29.410 に答える