2016-06-23 26 views
2

私は最近、Pythonの単純なWebアプリケーションでweb.pyを使用しています。私は、インポートステートメント、パッケージ、モジュールがどのように機能していたのか理解していたと思っていましたが、今は少し混乱していますインポート時に同じ名前のクラスを含むPythonモジュールはどのように機能しますか?

web.pyのAPIによれば、クラスapplicationはモジュールweb.applicationの中にあります。このクラスを使用するためには、チュートリアルでは、私はweb.applicationを使用してapplicationクラスのインスタンスを作成していますどのようにどのように私を混乱することはあるな

import web 
app = web.application(urls, globals()) 

として例を示します。内部あるクラスapplicationが存在する場合は、私が学んだことを、私のような何かをしなければならないことを期待するから、ウェブパッケージ内applicationという名前のモジュール:

web.application.application(urls, globals())

パッケージ - >モジュール - >クラス

私の混乱をクリアしてください。ここに私が参照しているweb.py APIへのリンクがありますhttp://webpy.org/docs/0.3/api#web.application

ありがとうございました!

+1

・ホープ[これは](http://docs.python-guide.org/en/latest/writing/structure/) – Rao

答えて

2

application.pyモジュールの属性がwebパッケージの__init__.pyにインポートされました(__all__経由)。 webパッケージの__init__.py

は、あなたが持っている:

from application import * # referring to application.py 

そしてapplication.py中:

__all__ = [ 
    "application", "auto_application", 
    "subdir_application", "subdomain_application", 
    "loadhook", "unloadhook", 
    "autodelegate" 
] 

したがって、application.pyで見つかった__all__で指定された属性から直接アクセスできるようになりましですトップレベルのインポート - web

あなたはread moreについてpackages__init__.py__all__

+0

ああに役立ちますので、私は便利に使用することができますすることができます'web'をインポートするだけで、' application'クラスは 'application'モジュール自体について心配する必要はありませんか? – bmcentee148

+0

はい、この場合 –

+0

しかし、それでは 'application'モジュールをどうやってインポートするのですか? 'import web' - >' app = web.application.application() 'のようなものを試してみると、クラス' application'に属性 'application'がないというエラーが出ます。代わりに 'import web.application'と言うと、クラスはモジュールではなく読み込まれます。 – bmcentee148

関連する問題