这是我模块的结构:
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文件,导入所有其他文件。但这感觉真的很黑。
答案 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
我不确定是否有更好的方法可以做到这一点,但这肯定会奏效。