【问题标题】:Pygame, 'Class' Object has no attribute rectPygame,“类”对象没有属性矩形
【发布时间】:2015-07-15 23:12:49
【问题描述】:

我正在使用 python 和 pygame 制作一个简单的游戏,并且我正在尝试使用 for 循环在屏幕上填充敌人。在我的游戏的其他部分中,我的代码看起来与我的相同,但无论出于何种原因,我都收到了错误

AttributeError: 'Enemy object has no attribute 'rect'

我将 enemy.rect.xenemy.rect.y 的值更改为 500 和 500,只是为了查看是否是我使用的变量导致了错误,但事实并非如此。

这是完整代码的 pastebin...http://pastebin.com/ZJ2u9w7t

完整的回溯是:

Traceback (most recent call last):
File "D:\Projects portfolio\PythonStuff\ShipTest.PY", line 119, in <module>
main()

File "D:\Projects portfolio\PythonStuff\ShipTest.PY", line 109, in main
enemy.rect.x = 500
AttributeError: 'Enemy' object has no attribute 'rect'
[Finished in 1.0s]

【问题讨论】:

  • 快速提示:您应该先尝试清理一下代码,然后将其实际放入您的问题中。
  • 感谢我尝试在帖子中执行代码块但没有正确格式化所有内容的提示,也从未实际使用过粘贴箱,但认为它显示行号对回溯非常有帮助.

标签: python pygame


【解决方案1】:

查看第 73 行:

def __init_(self):

您可能更喜欢:

def __init__(self):

鉴于您的拼写错误,您的 Enemy 类在您实例化它时没有构造函数,但是,您确实有一个无用的方法 __init_。因此,当您执行.rect.x 时,您会得到一个AttributeError

编辑:半无用,您仍然会得到一些预期的行为,因为您在 __init_ 中调用 super().__init__()

【讨论】:

    【解决方案2】:

    事实是你忘记了一个下划线。

    在代码的第 73 行中,您不小心写了这个:

    def __init_(self):
    

    您缺少下划线(最后一个)。你有两个在左侧,一个在右侧。要正确完成初始化,您需要像这样添加下划线:

    def __init__(self):
    

    这将允许Enemy 类有一个矩形,因为无论如何你都有self.rect = self.image.get_rect()。如果它是代码中唯一的错误/第一个错误,则缺少的下划线将始终引发 Attribute Error

    【讨论】:

    • 天哪,我现在就想拍自己。我很惊讶它本身并没有引发错误。几周前才开始学习。我猜是新手错误。非常感谢你们!
    • 您应该接受一个答案,并可能投票赞成您未选择的答案,因为我们都在几分钟内相互回复。
    • 完全同意你的看法。顺便说一句,答案很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多