2016-07-06 28 views
0

Pythonでは、同じmoduleまたは.py fileの複数のクラスの実践が一般的であることが分かりました。しかし、異なるクラスがまったく異なるパッケージを使用する場合、クラスのインポート文を選択的に指定できますか?同じ.pyファイル内の異なるクラスの異なるインポートステートメント?

次の(または一部のバリエーション)は可能ですか?

samefile.py:

import foo1 
import foo2 
class one 
     .... 
import foo2 
import foo3 
class two 
     .... 

また、私はモジュールがimportlibモジュール、impモジュールなどを使用して動的にインポートすることができることを見ましたが、彼らは、モジュールへのパスの知識を必要とするので、私はムカムカよそれらを試みることについて。

私のクラスは密接に関連しています。つまり、同じクラスに属していると便利です(簡略化のため)。.py fileしかし、彼らはまた、インポートによって完全に異なるモジュールを使用します。

これを行う方法はありますか?ちょうど知りたかったので、もしそうでなければ、私は各クラスのために個人.py filesに頼らなければならないでしょう。

+0

質問がありますか?あなたはどのようなコードを持っていますか? – Jezor

+0

あなたのコードを実行して自分自身で見てみませんか?ヒント:はい、それは実行可能ですが、モジュールの上部にあるすべてのものをインポートすることもできます(これは推奨方法です)。 – MisterMiyagi

+0

@MisterMiyagi私は、2つのクラス間のインポートステートメントを指示するように思えました。だから私はそれをする別の方法があるかもしれないと思ったのです。 – Brindha

答えて

1

これは完全に可能である:

import collections 
class Foobar(collections.OrderedDict): 
    pass 

import weakref 
class Barfoo(weakref.WeakKeyDictionary): 
    pass 

は読みやすくするために、あなたはファイルの先頭にあなたのimport秒を持っているshould。ただし、循環依存関係を避けるためにインポートの遅延が必要な場合もあります。

+0

ありがとう、私は再び動作していない理由を見るために自分のコードを調べます。また、他の場所でBarfooクラスを使用していたとします。weakrefモジュールのみをインポートするか、コレクションにも使用しますか?申し訳ありませんが、私はPythonの初心者ですので、私はここで失われています! – Brindha

+1

個々のクラス、モジュールのみをインポートすることはできません。あなたが「そのモジュールから輸入Barfoo」をしても、その「thatmodule」全体が輸入されます。インポートは、* all *クラスと関数定義、変数代入、**と 'import'ステートメント**を含むすべてのトップレベルコードを実行します。 – MisterMiyagi

関連する問題