1

Pythonは初めてです。これがナブのものである場合はお詫びします:

小さなモジュールの作成 (最終的にはパッケージになるかも?)。単一のファイルには大きすぎるため、大きなクラスを個別のファイルに移動しています。私のクラスはすべて、いくつかの基本的な機能を収容するために使用する基本クラスを拡張します。

これが私の問題の一般的な形式です:

ランタイム.py:

import baseclass
import subclass

#do stuff

baseclass.py

class BaseClass():
    def __init__(self):
        pass

    def sharedMethod(self):
        pass
        # shared functionality

サブクラス.py

class SubClass(baseclass.BaseClass):
    def __init__(self):
        BaseClass.__init__(self)

トレースバックは次のとおりです。

Traceback (most recent call last):
  File "/path/to/runtime.py", line 2, in <module>
    import baseclass, subclass
  File "path/to/subclass.py", line 2, in <module>
    class Subclass(baseclass.BassClass):
  NameError: name 'baseclass' is not defined

インポートbaseclassするとうまくいきsubclass.pyますが、これは、拡張するすべてのクラスがそれbaseclassをインポートする必要があることを意味しているようです。これを行う適切な方法が何度も何度もインポートされるわけではありません。baseclass

別々のファイルからクラスを相互に構築する順序でインポートできるようにしたいのですが、その方法がわかりません。アドバイス?


注:すべての回答は役に立ちました/正しかったです。「正しい」ものとして、最も徹底的で、誰にとっても役立つ可能性が最も高い答えを選択しました。乾杯、ありがとう。:)

4

2 に答える 2

7

あなたの言ったことはまさに正しい。ベースクラスを使用するファイルにインポートする必要があります。それを使用するファイルが多数ある場合、実際に正しい方法は、それを「何度も」インポートすることです。

しかし、それは baseclass を拡張するすべてのクラスがそれをインポートする必要があるという意味ではありません。これは、baseclass を使用するすべてのモジュールがそれをインポートする必要があることを意味します。特定のファイルにクラスを 1 つだけ持つ必要はありません。また、そのようにする特別な理由もありません。import baseclass1 つのファイルに格納し、そのファイルで、すべて baseclass から継承されたいくつかの新しいクラスを定義することはまったく問題ありません。それは物事を行うための良い方法です。各クラスが実際にそれを保証するのに十分な大きさと複雑さを持っていない限り、各クラスを独自のファイルに分割しないでください。

さらに、import baseclass多くのファイルで実行しても、リソースに関しては何もかかりません。実際のbaseclass.pyファイルは 1 回だけ実行され、同じモジュールがその後のインポートで再利用されるため、何度もインポートしてもパフォーマンスの面で余分なペナルティを支払うことはありません。

importPython ファイルが他の Python モジュールからのものにアクセスする方法です。あるファイルのものをインポートせずに別のファイルで使用することはできません。

ちなみに、なぜその__name__ = "SubClass"ビジネスをモジュールに入れているのですか?

于 2013-05-31T17:50:40.650 に答える
0

Python では、モジュールは個別のプログラムのように動作します。したがって、baseclass を runtime.py にインポートすると、subclass.py にはインポートされません。subclass.py は baseclass 自体をインポートする必要があります。

于 2013-05-31T17:53:06.063 に答える