27

Python の学習と練習用アプリの作成を開始しました。ディレクトリ構造は次のようになります

src
 |
 --ShutterDeck
    |
    --Helper
       |
       --User.py -> class User
    --Controller
       |
       --User.py -> class User

srcディレクトリは にありますPYTHONPATH。別のファイルで、たとえば、両方のクラスmain.pyにアクセスしたいとします。Userどうすればできますか。

以下を使用してみましたが、失敗します。

import cherrypy
from ShutterDeck.Controller import User
from ShutterDeck.Helper import User

class Root:
  @cherrypy.expose
  def index(self):
    return 'Hello World'

u1=User.User()
u2=User.User()

それは確かに曖昧です。私が考えることができる他の(それを行うC ++の方法)方法は

import cherrypy
from ShutterDeck import Controller
from ShutterDeck import Helper

class Root:

  @cherrypy.expose
  def index(self):
    return 'Hello World'

u1=Controller.User.User()
u2=Helper.User.User()

しかし、上記のスクリプトを実行すると、次のエラーが発生します

u1=Controller.User.User()
AttributeError: 'module' object has no attribute 'User'

なぜエラーになるのかわかりませんか?ディレクトリShutterDeckHelperおよびそれらの中にControllerあり__init__.pyます。

4

3 に答える 3

47

Userモジュールをパッケージ__init__.pyファイルにインポートして、属性として使用できるようにします。

したがって、両方に次Helper/__init_.pyController/__init__.py追加します。

from . import User

これにより、モジュールがパッケージの属性になり、そのように参照できるようになります。

または、モジュール自体を完全にインポートする必要があります。

import ShutterDeck.Controller.User
import ShutterDeck.Helper.User

u1=ShutterDeck.Controller.User.User()
u2=ShutterDeck.Helper.User.User()

フルネームで参照してください。

別のオプションは、インポートされた名前の名前をas次のように変更することです。

from ShutterDeck.Controller import User as ControllerUser
from ShutterDeck.Helper import User as HelperUser

u1 = ControllerUser.User()
u2 = HelperUser.User()
于 2013-03-30T16:08:25.063 に答える
10

1つの方法は次のとおりです。

import ShutterDeck.Controller.User
import ShutterDeck.Helper.User

cuser = ShutterDeck.Controller.User.User()
huser = ShutterDeck.Helper.User.User()

これを行うこともできます:

from ShutterDeck.Controller.User import User as ControllerUser
from ShutterDeck.Helper.User import User as HelperUser
于 2013-03-30T16:09:22.193 に答える