May*_*ank 22 python package python-import python-3.x
我已经开始学习python并编写练习应用程序.目录结构如下
src
|
--ShutterDeck
|
--Helper
|
--User.py -> class User
--Controller
|
--User.py -> class User
Run Code Online (Sandbox Code Playgroud)
该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()
Run Code Online (Sandbox Code Playgroud)
这当然是模棱两可的.我能想到的另一种(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()
Run Code Online (Sandbox Code Playgroud)
但是当运行上面的脚本时,它会出现以下错误
u1=Controller.User.User()
AttributeError: 'module' object has no attribute 'User'
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么会出错?该目录ShutterDeck,Helper并Controller具有__init__.py在其中.
Mar*_*ers 35
您希望导入User包__init__.py文件中的模块以使其可用作属性.
因此,在这两个Helper/__init_.py和Controller/__init__.py补充:
from . import User
Run Code Online (Sandbox Code Playgroud)
这使得模块成为包的属性,您现在可以这样引用它.
或者,您必须完整导入模块:
import ShutterDeck.Controller.User
import ShutterDeck.Helper.User
u1=ShutterDeck.Controller.User.User()
u2=ShutterDeck.Helper.User.User()
Run Code Online (Sandbox Code Playgroud)
所以用他们的全名来称呼他们.
另一个选项是使用以下命令重命名导入的名称as:
from ShutterDeck.Controller import User as ControllerUser
from ShutterDeck.Helper import User as HelperUser
u1 = ControllerUser.User()
u2 = HelperUser.User()
Run Code Online (Sandbox Code Playgroud)
一种方法是:
import ShutterDeck.Controller.User
import ShutterDeck.Helper.User
cuser = ShutterDeck.Controller.User.User()
huser = ShutterDeck.Helper.User.User()
Run Code Online (Sandbox Code Playgroud)
您也可以这样做:
from ShutterDeck.Controller.User import User as ControllerUser
from ShutterDeck.Helper.User import User as HelperUser
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29355 次 |
| 最近记录: |