python:不同包下同名的两个模块和类

标签 python python-3.x package python-import

我已经开始学习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'

我无法弄清楚为什么会出错? ShutterDeckHelperController 目录中有 __init__.py

最佳答案

您希望在包 __init__.py 文件中导入 User 模块,以使其可用作属性。

所以在 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()

关于python:不同包下同名的两个模块和类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15720593/

相关文章:

python - 如何以 3d 形式可视化函数值?

python - 使用 godot 连接 python 本地服务器

python - 变量没有传递到较低级别?

java - 将 Java 包分配给 JRuby 类

python - 在浏览器中将图像作为附件发送

python - numpy,用数组替换列

python - Python包的本地集合: best way to import them?

r update.packages() 不更新由其他包导入的包

python - SQLAlchemy 列属性和关系返回 bool 值

python - 在Python中定义列表和调用函数