1

Python のモジュールのシステムとそれらのインポートについていくつか質問があります。アプリの構造は次のとおりです。

preloader/   
    preload.py
    Core/
        Generator.py
        Logger.py
        ErrorHandling.py
    Libraries/
        MySQLi.py
        memcached.py

__init__.pyファイルは、ルートレベルであってもすべてのフォルダー内に存在し、読みやすくするために構造から省略されています。

内部では、モジュールpreload.pyをインポートしたいと考えています。memcachedだから私は書くfrom Libraries import memcached。内部memcached.pyには という名前のクラスがありMemcachedます。したがって、インスタンス化する必要があるときは、このようなものを書かなければなりませんmem = memcached.Memcached()。どうすれば書くことを避けてmodulename.classname()、ただすることができますclassname()か?

また、これを preload.py 内で試しましfrom preloader.Libraries.memcached import Memcachedた。それは私にそのようなモジュールエラーを与えませんでした!!

別の質問です。誰かが相対的な輸入に光を当ててください. の中にI want this class insidepreload.pyという名前のクラスがあります。どうすればそれを達成できますか?相対インポートで試しました。次に、実行するとエラーが発生します。それから私は試しました。しかし、循環インポートを行っているため、インポートできません。この問題を解決するには?ThreadManagerErrorHandling.pyfrom .. import preloadpreload.pyValueError: Attempted relative import beyond toplevel packagefrom preload import ThreadManager

Python バージョン 2.7.3

4

1 に答える 1

2

クラスのfrom package.module import names構文を使用できます。Memcached

from Libraries.memcached import Memcached

次に、コードMemcachedの代わりに使用memcached.Memcachedします。

別のモジュールから使用する必要がありThreadManager、循環インポートに遭遇した場合は、モジュールを再編成する必要があります。新しいモジュールに移動し、そのクラスを と の両方からThreadManagerインポートします。preloadCore.ErrorHandling

于 2012-12-04T18:44:08.190 に答える