为什么在单独的模块中调用一个类时会出现AttributeError?

2024-04-26 21:10:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在(尝试)用python2.7.12在Pygame中重新创建mariolevel1-1。以下是两个相关文件:

在主.py: http://pastebin.com/HXmBdJ2a

在马里奥.py: http://pastebin.com/29xu1tMM
我的问题是:当我跑的时候主.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

我很困惑马里奥.py班上的马里奥。如果我想逃跑马里奥.py,我得到这个错误:

^{pr2}$


有人能给我解释一下吗?
编辑:我通过添加:
import sys sys.path.insert(0, "scripts")
import mario
来修复它 在


Tags: topathinpyimportcomhttpmain
1条回答
网友
1楼 · 发布于 2024-04-26 21:10:34

本例中的AttributeError: 'module' object has no attribute '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!!!
        .......
        .......

要么你在游戏类的self.Mario = mario.Mario()中有__init__,要么只调用你拥有的代码中的Mario = mario.Mario()
这意味着保留已有的代码应该:

^{pr2}$

旁注:为什么在您的马里奥·皮伊?试着把它去掉。
如果不使用main.py中定义的任何方法或类,则可以删除mario.py中的{}。在

相关问题 更多 >