【发布时间】:2018-08-23 15:50:35
【问题描述】:
我正在处理一个包含多个包和子包的项目,但遇到了导入问题:
Traceback (most recent call last):
File "***/src/dev/dev_salle.py", line 5, in <module>
from src.envir.jeu import Salle
File "***/src/envir/jeu/__init__.py", line 1, in <module>
from camera import Camera
File "***/src/envir/jeu/camera.py", line 5, in <module>
class Camera(object):
TypeError: Error when calling the metaclass bases
'function' object is not iterable
据我了解,它与 Camera 的元类和其他由于嵌套导入而从对象冲突派生的类有关。我注意到的其他一些事情:
-
如果我将 camera.py 中的 Camera 实例化为 main,错误仍然存在
if __name__ == "__main__": print Camera() 删除对象继承后错误消失,但我想保留它以使用 __slots__。
如果我在 camera.py 中为 Camera 创建元类 MetaCamera(type),错误仍然存在
-
如果我调用该错误不会发生
class Blabla(object):pass if __name__ == "__main__": print Blabla()在 ***/src/、***/src/envir/ 或 ***/src/envir/jeu/ 中
-
我还从另一个子包 Pti(object) 和 Porte(Pti) 导入其他类。 Pti 导入很好,但 Porte 引发此错误:
Traceback (most recent call last): File "***/src/dev/dev_salle.py", line 5, in <module> from src.envir.jeu import Salle File "***/src/envir/jeu/__init__.py", line 2, in <module> from salle import Salle File "***/src/envir/jeu/salle.py", line 10, in <module> from src.envir.elements.pti import Pti, Porte, Monnaie File "***/src/envir/elements/pti.py", line 14, in <module> class Porte(Pti): TypeError: Error when calling the metaclass bases 'function' object is not iterable
结构的回顾,因为它有点乱:
src
|--dev
| '--dev_salle.py
'--envir
|--jeu
| |--camera.py
| '--salle.py
'--elements
'--pti.py
我既不习惯元类也不习惯嵌套导入,所以我有点不知所措......
【问题讨论】:
-
在继续解决我的问题的同时,我将 jeu 和 elements 包移动到与 dev 相同的级别:Camera 的错误消失但 Porte(Pti) 的错误消失了。
标签: python-2.7 import metaclass