Python 属性错误:'module' 对象没有 'init' 属性

2 投票
4 回答
4137 浏览
提问于 2025-04-16 23:26

我在运行一个简单的Python文件:

from livewires import games

games.init(screen_width = 640, screen_height = 480, fps = 50)

games.screen.mainloop()

当我在IDLE中运行这个代码时,出现了标题中的错误。我是从一本书里复制粘贴的这段代码。作为一个初学者,我对这些还不太了解。我很确定我已经正确安装了livewires,因为我之前用它的模块运行过其他程序。(天哪,我知道这可能不是正确的术语,抱歉。)我并不是特别想要一个解决方案(虽然能解决当然更好),我只是希望有人能详细解释一下问题出在哪里。我是从书上复制的代码,所以我不明白我哪里做错了。我也百分之百确定没有拼写错误。

4 个回答

1

我刚开始读同一本书,《Python编程》第三版,作者是迈克尔·道森,结果遇到了同样的问题。自从书写这本书以来,情况发生了变化。

如果你还是想创建窗口,这里有我用的代码,它可以正常工作:

from livewires import games

#This is the code M. Dawson has in the book
#games.init(screen_width = 640, screen_height = 480, fps = 50)
#games.screen.mainloop()

my_screen = games.Screen(width = 640, height = 480)
my_screen.mainloop(fps = 50)

现在,屏幕被当作一个对象来创建。Screen类不再在构造函数中接受fps参数,而是要把这个fps传递给mainloop方法。如果你不把fps传给mainloop方法,它会默认设置为50。

2

可以从这本书的配套网站下载一个旧版本的livewires,这个版本可以和《Python Programming for the Absolute Beginner》中的代码一起使用:

http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp?isbn=1435455002

3

经过一番搜索,似乎找到了这个网站:Livewires主页,在这里可以下载他们的livewires包。

另外,这里有一些代码来自于这个链接:第11章,看起来和他在这里发布的内容(“比萨饼恐慌游戏”)很像。

下载并解压livewires后发现,游戏模块里确实没有init函数(正如评论中提到的)。

要么这本书里的例子是不能用的(不太可能,因为书里对这个例子的解释很详细);要么livewires包在书写时和现在之间发生了变化(这种可能性更大)。

livewires网站上还有其他例子,我觉得你会更容易成功。
我建议你放弃这本书,因为你可能会不断遇到类似的问题。用谷歌搜索一下,会找到很多更新的免费Python教程,这些教程会更容易理解。

这个页面有一些适合初学者的链接:初学者指南

撰写回答