Python 3.5.1导入类在同一目录

时间:2017-03-22 04:55:39

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

因此,我无法在同一目录中导入类并使其正常工作。

我目前有以下的hiearchy

  • BBDriver.py
  • bbsource:
    • BouncyBallEnv.py
    • Console.py
  • 资源:
    • 杂项:
    • 对象:
      • Ball.py
      • Platform.py

我的问题出在bbsource目录中的2个文件之间。我已经想出了如何从bbsource目录访问objects目录中的类,反之亦然,但是当我在from BouncyBallEnv import BouncyBallEnv类中尝试Console时得到以下错误:

File "E:\PycharmProjects\BouncyBallPythonV0\bbsource\Console.py", line 5, in 
    from BouncyBallENV import BouncyBallEnv
ImportError: cannot import name 'BouncyBallEnv'

我尝试了几件事:

from bbsource import BouncyBallEnv

from bbsource.BouncyBallEnv import BouncyBallEnv

但是我无法让它发挥作用。

我唯一能让它发挥作用的是我做了以下事情:



    import bbsource.BouncyBallEnv
    #Extra
    print(bbsource.BouncyBallEnv.BouncyBallEnv.WIDTH)

但是必须有一个更好的方法来做到这一点,这样我每次想要使用静态变量时都不必输入print语句中的冗长语句BouncyBallEnv

我仍然对Python导入的工作原理感到困惑,所以我不确定如何去做。谢谢。

注意:运行Python 3.5.1

2 个答案:

答案 0 :(得分:2)

你需要的是别名:

import bbsource.BouncyBallEnv as bbe
#Extra
print(bbe.WIDTH)

并且您无法导入具有from ... import ...语法的模块。只有属性。它的工作原理如下:

import <module> [as <alias>]

or

from <module> import <attribute> [, <attribute2>...]  # import some attributes
from <module> import *                                # import everything

第二个,你可以做到:

from bbsource.BouncyBallEnv import WIDTH
# the variable WIDTH is directly loaded : watch out for collision !

print(WIDTH)

答案 1 :(得分:1)

这是abosolue_import规则。

from .BouncyBallENV import BouncyBallEnv

以相对位置访问模块。

此外,__init__.py目录

下应该有一个bbsource文件