TypeError:调用元类库'函数'时出错。对象不可迭代

时间:2018-03-14 23:30:16

标签: python-2.7 import metaclass

我正在处理一个包含多个软件包和子软件包的项目,并且遇到了导入问题:

    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

我以前既不习惯元类也不习惯嵌套导入,所以我有点迷失...

1 个答案:

答案 0 :(得分:0)

我终于解决了我的问题!

这与嵌套导入无关 - '

在导入引发错误的两个类中,我将__slots__定义为:

def __slots__(self): return ("bla", "bli", "blu")

虽然正确的定义是:

__slots__ = ("bla", "bli", "blu")

由于元类使用__slots__来启动类字典,因此会引发元类错误。