4

例えば:

 Files/ 
    main.py
    SubFileA/
        __init__.py              "from util1 import help"
        util1.py                 "def help(): print ...A..."
    SubFileB/
        __init__.py              "from util1 import help"
        util1.py                 "def help(): print ...B..."

SubFileA と SubFileB の util1.py の内容が異なります。

ユーザーがどの util1.py をインポートするかを指定できる方法が必要です。

私は次のようなものを期待しています:

  if subFileA:
       from SubFileA import *
  else:
       from SubFileB import *

util1.py の API は同じですが、実装が異なります。

これを行う理由は、2 つの util1.py を組み合わせると、コードが見にくくなり、保守が難しくなるためです。誰かが私にこれに対する解決策を教えてくれることを願っています、またはどんなアドバイスも素晴らしいでしょう!

これらのコードを試してみましたが、警告が表示されました (動作しますが、警告は恥ずかしいです):

main.py:4: SyntaxWarning: import * only allowed at module level
   def main():
main.py:4: SyntaxWarning: import * only allowed at module level
   def main():

みんな。私は解決策を見つけたと思います。しかし、それは良いプログラミングスタイルではないと思います。

Files/
   main.py                              "from directory import *"
   directory/
       __init__.py                      
                                        "user=raw_input() 
                                        if user: 
                                              from directoryA import *
                                        else
                                              from directoryB import * "
       directoryA/
           __init__.py                   "from util1 import help1()"
           util1.py 
       directoryB/
           __init__.py                   "from util1 import help1()"
           util1.py 

確かに、これは非常に奇妙に見えます。しかし、それは仕事をします。

4

1 に答える 1

1

from <package> import ...構文を機能させるには、各ディレクトリをパッケージにする必要があります。ディレクトリがパッケージであることを Python に伝えるには、__init__.py各ディレクトリに空のファイルを作成するだけです。

util1インポートされるのバージョンに応じて特定の動作が必要な場合は、各__init__.pyファイルに初期化コードを記述できます。

詳細については、パッケージに関する公式ドキュメントを確認してください。


最終的に、新しいプロジェクト ディレクトリ ツリーは次のようになります。

Files/ 
    main.py
    SubFileA/
        __init__.py
        util1.py
    SubFileB/
        __init__.py
        util1.py
于 2012-05-23T19:32:36.040 に答える