You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python报错AttributeError:Menu对象无append_option属性的解决方法

解决AttributeError: 'Menu' object has no attribute 'append_option'问题

问题重现

你定义了如下Menu类:

class Menu:

    def __init__(self):
        self._option_surfaces = []
        self._callbacks = []
        self._current_option_index = 0

    def append_option(self, option, callback, font):
        self._option_surfaces.append(font.render(option, True, (255, 255, 255)))
        self._callbacks.append(callback)

创建实例并调用方法时:

menu = Menu()

font = pygame.font.Font('Rostov.ttf', 60)

menu.append_option('Play', lambda: print('Oh hell nah man'), font)

触发错误:

AttributeError: 'Menu' object has no attribute 'append_option'

可能的解决办法

  • 检查方法缩进是否正确
    Python对缩进要求严格,如果append_option方法的缩进比__init__更深(比如不小心缩进成__init__的内部函数),那这个方法就不属于Menu类,实例自然访问不到。确保方法和__init__是同一缩进层级:

    class Menu:
        def __init__(self):
            # __init__内部代码
            ...
        # 和__init__同缩进,属于类的方法
        def append_option(self, option, callback, font):
            ...
    
  • 确认类定义在实例化之前执行
    如果menu = Menu()这行代码写在Menu类定义的前面,或者多文件拆分时导入实例化代码的时机早于类定义,也会触发该错误。确保类定义代码先于实例化代码执行。

  • 排查命名空间冲突
    检查是否有其他地方定义了同名的Menu类,比如是否导入了第三方库中的Menu类(如from some_module import Menu),导致自己定义的Menu被覆盖。可以打印类的来源验证:

    print(Menu.__module__)
    

    如果输出不是当前脚本的名字,说明你使用的不是自己定义的Menu类。

  • 清理运行环境缓存
    部分IDE(如PyCharm)会缓存旧代码版本,导致修改后的代码未生效。试试重启IDE,或者直接在终端用python your_script.py运行脚本,排除IDE缓存问题。

内容的提问来源于stack exchange,提问作者FR1LL0G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 15:12:14