我已经开始学习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'
我无法弄清楚为什么会出错? ShutterDeck
、Helper
和 Controller
目录中有 __init__.py
。
最佳答案
您希望在包 __init__.py
文件中导入 User
模块,以使其可用作属性。
所以在 Helper/__init_.py
和 Controller/__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()
关于python:不同包下同名的两个模块和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720593/