Python 为什么在单独的模块中调用类时会得到AttributeError?

Python 为什么在单独的模块中调用类时会得到AttributeError?,python,python-2.7,pygame,attributeerror,Python,Python 2.7,Pygame,Attributeerror,我正在(尝试)用Python 2.7.12在Pygame中重新创建Mario level 1-1。以下是两个相关文件: main.py: mario.py: 我的问题是:当我运行main.py时,解释器会给我以下错误消息: Traceback (most recent call last): File "C:/path/to/main.py", line 6, in <module> import mario File "C:\path\to\mario.py",

我正在(尝试)用Python 2.7.12在Pygame中重新创建Mario level 1-1。以下是两个相关文件:

main.py:

mario.py:
我的问题是:当我运行main.py时,解释器会给我以下错误消息:

Traceback (most recent call last):
  File "C:/path/to/main.py", line 6, in <module>
    import mario
  File "C:\path\to\mario.py", line 7, in <module>
    import main
  File "C:\path\to\main.py", line 47, in <module>
    game = Game()
  File "C:\path\to\main.py", line 26, in __init__
    self.main_loop()
  File "C:\path\to\main.py", line 39, in main_loop
    self.Mario = mario.Mario()
AttributeError: 'module' object has no attribute 'Mario'
Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“C:/path/to/main.py”,第6行,在
进口马里奥
文件“C:\path\to\mario.py”,第7行,在
进口干管
文件“C:\path\to\main.py”,第47行,在
游戏
文件“C:\path\to\main.py”,第26行,在\uuu init中__
self.main_循环()
文件“C:\path\to\main.py”,第39行,在主循环中
self.Mario=Mario.Mario()
AttributeError:“模块”对象没有属性“Mario”
进程已完成,退出代码为1

我很困惑,就像mario.py上mario课一样。如果我尝试运行mario.py,就会出现以下错误:

Traceback (most recent call last):
  File "C:/path/to/mario.py", line 7, in <module>
    import main
  File "C:\path\to\main.py", line 6, in <module>
    import mario
  File "C:\path\to\mario.py", line 12, in <module>
    sheet = pygame.image.load("../assets/images/MarioLuigiSprites.png").convert()
pygame.error: No video mode has been set
Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“C:/path/to/mario.py”,第7行,在
进口干管
文件“C:\path\to\main.py”,第6行,在
进口马里奥
文件“C:\path\to\mario.py”,第12行,在
sheet=pygame.image.load(“../assets/images/marioligisprites.png”).convert()
pygame.error:未设置视频模式
进程已完成,退出代码为1

有人能给我解释一下吗?
编辑:我通过添加:
import sys来修复它

sys.path.insert(0,“scripts”)
import mario
在本例中,
AttributeError:“module”对象没有属性“mario”
,这是因为
Game
类没有名为
mario
的属性,因为您没有在游戏类的init中定义它。为了明确起见,您没有:

class Game(object):
    def __init__(self):
        self.fps = 60
        self.showfps = True
        self.clock = pygame.time.Clock()

        # Set FPS
        self.clock.tick(self.fps)

        self.Mario = mario.Mario()  # notice this line!!!
        .......
        .......
您可以在游戏类的
\uuu init\uuuu
中使用
self.Mario=Mario.Mario()
,也可以在代码中调用
Mario=Mario.Mario()

这意味着保留您已经拥有的代码,您应该执行以下操作:

def main_loop(self):
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.closegame()
        Mario = mario.Mario()  # notice: it's not self.Mario....
        DISPLAYSURF.fill(const.BLACK)   
旁注:为什么在mario.py的末尾调用
mario=mario()
?尝试删除该选项。

如果您不使用在
main.py
中定义的任何方法或类,您可以在
mario.py
中删除
import main

尝试导入mario.marioa,并且尝试执行此操作
screen=pygame.display.set_模式((num,num))
以避免无视频模式错误请参见:我尝试导入mario.mario,并且得到:ImportError:没有名为Marioth的模块问题是Game类没有名为Mario的属性,因为您没有在Game类的
\uuuu init\uuuu
中定义它。您可以在游戏类的
\uuuu init\uuuu
中使用
self.Mario=Mario.Mario()
,或者只调用
Mario=Mario.Mario()
。另外,为什么在
mario.py
的末尾调用
mario=mario()
?你应该试着把它去掉。谢谢。现在,当我运行main时,我得到一个不同的错误:sheet=pygame.image.load(“../assets/images/marioligisprites.png”).convert()pygame.error:没有设置视频模式您是否已经检查了@Nikhil Raghavendra对该视频问题的评论?如果您没有查看,请再次查看:即使在pygame.display.set_mode()中没有使用元组,我仍然会收到“no video mode was set”错误。设置显示后,我尝试导入mario.mario,得到:ImportError:没有名为mario的模块