基于依赖性导入两个不同版本模块的逻辑?

时间:2013-12-29 05:29:08

标签: python-2.7 module

这是我模块的结构:

PyTurtle3D/
    __init__.py
    shape.py
    turtle_core/
        __init__.py
        wireframe.py
    pygame_core/
        __init__.py
        wireframe.py
    cube.py
    tetrahedron.py

两个核心模块中定义的WireFrame类都是顶级Shape类的子类。 Cube和Tetrahedron类是我可以使用的任何Wireframe类的子类,更喜欢pygame类。我可以在__init__.py文件中做些什么来实现这一点吗?

这是我在PyTurtle3D的__init__.py文件中尝试的(其他两个是空白的。):

try:
    import pygame
except:
    import turtle_core as core
else:
    import pygame_core as core
finally:
    WireFrame = core.wireframe.WireFrame

但是python正在说AttributeError: 'module' object has no attribute 'wireframe'

另外,在我做了两个单独的wireframe.py实现之前,我在cube.py和tetrahedron.py文件的顶部有这些行:

from wireframe import WireFrame

class Cube(WireFrame):
    ...

我现在该怎么办?我应该将所有不同的实现保持在一起,并检查每个类的顶部不同的pygame吗?如果我不必更改cube.py或tetrahedron.py,那将会很酷。

我能想到的唯一不用检查pygame的方法是在检查pygame时导入我在顶级__init__.py文件中修改的constants.py文件,导入所有其他文件。但这感觉真的很黑。

1 个答案:

答案 0 :(得分:0)

编辑:根据您更新的问题: 你做不到

from _core.wireframe import WireFrame
在python中

。模块核心已经导入,因此您可以这样做:

Wireframe = _core.wireframe.Wireframe

获得所需的线框。

OLD:

我想你可以这样做:

try:
     import pygame
except:
     print("Module not found")
     import custommodule
     import subclass2

我不确定是否有更好的方法可以做到这一点,但这肯定会奏效。