【问题标题】:Pyglet Subclass object has no attributePyglet 子类对象没有属性
【发布时间】:2013-12-23 16:46:36
【问题描述】:

我正在用 pyglet 开发一个游戏,这是第一次,虽然我通常使用 pygame

我正在尝试在 pyglet 中进行子类化。

class menu(pyglet.sprite.Sprite):

    def __init(self, *args, **kwargs):
        super(menu, self).__init__(self, *args, **kwargs)
        self.labels = {}


class pause_menu(menu):

    def __init__(self, *args, **kwargs):
        super(pause_menu, self).__init__(self, *args, **kwargs)

        self.labels['resume'] = pyglet.text.Label('Resume Game', font_name='Times New Roman', font_size=36, x=window.main.width//2, y=window.main.height//2)

我收到了这个错误

File "C:\Python33\lib\site-packages\pyglet\sprite.py", line 225, in __init__
self._texture = img.get_texture()
AttributeError: 'pause_menu' object has no attribute 'get_texture' 'get_texture'.

发生了什么事?我是不是用错了?

顺便说一句: 正在从另一个模块调用该类

pause_menu = menu.pause_menu(x=0, y=0, batch=menu_batch, img=None)

【问题讨论】:

  • 你的意思是从 __init__(self, *args, **kwargs) 中删除 self,出现同样的错误
  • 你在两个地方使用它,其中一个永远不会被调用。

标签: python python-3.x pyglet


【解决方案1】:

您调用父级__init__ 错误;使用super(menu, self).__init__(*args, **kwargs)。该方法由super() 为您绑定

您还错误地命名了menu.__init__,最后缺少双下划线。

class menu(pyglet.sprite.Sprite):
    def __init__(self, *args, **kwargs):
        super(menu, self).__init__(*args, **kwargs)
        self.labels = {}

class pause_menu(menu):
    def __init__(self, *args, **kwargs):
        super(pause_menu, self).__init__(*args, **kwargs)
        self.labels['resume'] = pyglet.text.Label('Resume Game', font_name='Times New Roman', font_size=36, x=window.main.width//2, y=window.main.height//2)

因为您显式传入了self,所以pyglet.sprite.Sprite.__init__() 使用两个 位置参数调用,均引用self

因此,第二个self 参数被视为img argumentpyglet 尝试在其上调用AbstractImage.get_texture() method

【讨论】:

  • 定义“仍然不工作”?你仍然得到同样的例外吗?或者你现在有不同的例外吗?如果您遇到完全相同的异常,您确定您保存了源文件并重新启动了 python 脚本吗?如果在某处引入额外的“print()”行会怎样?
  • 同样的异常,如果我在 super 之前添加一个打印行,我得到的只是 hello 和错误
  • 不,traceback 还是一样的吗?是不是在同一个地方造成的?
  • 原来的traceback指向pause_menu类中的super,现在它指向menu类中的super。是的,我删除了两个双重自我。
  • pause_menu 仍然是回溯的一部分,对吧?异常仍然声称img.get_texture() 行在get_texture 上为pause_menu 类型提供了属性错误?那么第一个参数仍然是 pause_menu 实例,所以 something 正在传递额外的参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-25
  • 1970-01-01
相关资源
最近更新 更多