我正在处理一个包含多个软件包和子软件包的项目,并且遇到了导入问题:
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实例化为主
,则错误仍然存在if __name__ == "__main__":
print Camera()
删除对象继承时,错误消失,但是我想让它保持使用__slots __。
如果我在camera.py中为Camera创建元类MetaCamera(类型),那么错误仍然存在
如果我致电
,则不会发生错误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
我以前既不习惯元类也不习惯嵌套导入,所以我有点迷失...
答案 0 :(得分:0)
我终于解决了我的问题!
这与嵌套导入无关 - '
在导入引发错误的两个类中,我将__slots__定义为:
def __slots__(self): return ("bla", "bli", "blu")
虽然正确的定义是:
__slots__ = ("bla", "bli", "blu")
由于元类使用__slots__来启动类字典,因此会引发元类错误。