Python 属性错误:'module' 对象没有 'init' 属性
我在运行一个简单的Python文件:
from livewires import games
games.init(screen_width = 640, screen_height = 480, fps = 50)
games.screen.mainloop()
当我在IDLE中运行这个代码时,出现了标题中的错误。我是从一本书里复制粘贴的这段代码。作为一个初学者,我对这些还不太了解。我很确定我已经正确安装了livewires,因为我之前用它的模块运行过其他程序。(天哪,我知道这可能不是正确的术语,抱歉。)我并不是特别想要一个解决方案(虽然能解决当然更好),我只是希望有人能详细解释一下问题出在哪里。我是从书上复制的代码,所以我不明白我哪里做错了。我也百分之百确定没有拼写错误。
4 个回答
我刚开始读同一本书,《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。
可以从这本书的配套网站下载一个旧版本的livewires,这个版本可以和《Python Programming for the Absolute Beginner》中的代码一起使用:
http://www.delmarlearning.com/companions/content/1435455002/downloads/index.asp?isbn=1435455002
经过一番搜索,似乎找到了这个网站:Livewires主页,在这里可以下载他们的livewires包。
另外,这里有一些代码来自于这个链接:第11章,看起来和他在这里发布的内容(“比萨饼恐慌游戏”)很像。
下载并解压livewires后发现,游戏模块里确实没有init
函数(正如评论中提到的)。
要么这本书里的例子是不能用的(不太可能,因为书里对这个例子的解释很详细);要么livewires包在书写时和现在之间发生了变化(这种可能性更大)。
livewires网站上还有其他例子,我觉得你会更容易成功。
我建议你放弃这本书,因为你可能会不断遇到类似的问题。用谷歌搜索一下,会找到很多更新的免费Python教程,这些教程会更容易理解。
这个页面有一些适合初学者的链接:初学者指南