11

PythonクラスをPythonコンソール内で機能させるのに問題があります。すべてのクラスをグローバル名前空間に自動的にインポートして、prefix.module.namesなしで使用できるようにします。

これが私がこれまでに持っているものです...

projectname/
|-__init__.py
|
|-main_stuff/
  |-__init__.py
  |-main1.py
  |-main2.py
  |
  |-other_stuff/
    |-__init__.py
    |-other1.py
    |-other2.py

各ファイルは同じ名前のクラスを定義します。たとえば、main1.pyはMain1と呼ばれるクラスを定義します。

MyPYTHONPATHはprojectname/への絶対パスです。

これを含むPythonスタートアップファイルがあります:

from projectname import *

しかし、これではクラスをまったく使用できません。Pythonコンソールを起動したら、次のように記述できるようにしたいと思います。

ob=Main1()

ただし、Main1は現在の名前空間内にないため、機能しません。

__init__.pyファイルに追加してみました...

projectname/__init__.py

import main_stuff

projectname/main_stuff/__init__.py

import other_stuff
__all__ = ["main1", "main2", "main3"]

等々。そして、スタートアップファイルに次のように追加しました。

from projectname.main_stuff import *
from projectname.main_stuff/other_stuff import *

しかし、Pythonコンソール内でクラスを使用するには、次のように記述する必要があります。

ob=main1.Main1()

私はそのmain1.部分を必要としないことを望みます。Pythonコンソールを使用するときにクラスをグローバル名前空間に自動的に配置する方法を知っている人はいますか?

ありがとう。

====編集====

必要なのは、クラスレベルでパッケージをインポートすることですがfrom package import *、モジュールレベルですべてを提供します。私はこのようなことをする簡単な方法を求めています:

for module in package do:
    from package.module import *

====別の編集====

結局、クラスインポートをPythonスタートアップファイルに個別に追加することになりました。それを維持するオーバーヘッドのためにそれは理想的ではありませんが、それは私が望むことをします。

from class1.py import Class1
from class2.py import Class2
from class3.py import Class3
4

1 に答える 1

21

別の形式のインポートを使用したい。

projectname/main_stuff/__init__.py

from other_stuff import *
__all__ = ["main1", "main2", "main3"]

次のようなステートメントを使用する場合:

import foo

現在のモジュールでfooという名前を定義しています。foo.something次に、fooの内容を取得するために使用できます。

これを使用する場合:

from foo import *

fooで定義されているすべての名前を取得し、このモジュールで定義しています(fooからモジュールに名前のバケットを注ぐなど)。

于 2009-09-30T16:13:14.597 に答える