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

Python pygame报错:Object has no attribute 'get_width' 求助

问题分析与解决:封装类后调用image.get_width()报错

核心原因

你遇到的问题本质是Myexperiment类中的image属性没有被正确初始化为pygame的Surface对象——get_width()是pygame Surface独有的方法,如果image是字符串(比如图片路径)、None或其他非Surface类型,调用该方法必然会报错。

常见错误场景与修正方案

1. 直接赋值图片路径而非加载后的Surface

错误代码示例:

import pygame

class Myexperiment:
    def __init__(self):
        # 错误:仅赋值路径,未加载为Surface
        self.image = "player.png"

pygame.init()
screen = pygame.display.set_mode((800, 600))
exp = Myexperiment()
exp.image.get_width()  # 报错:'str' object has no attribute 'get_width'

修正后代码:

import pygame

class Myexperiment:
    def __init__(self, img_path):
        # 正确加载图片为Surface对象,convert_alpha保留透明通道
        self.image = pygame.image.load(img_path).convert_alpha()

pygame.init()
screen = pygame.display.set_mode((800, 600))
exp = Myexperiment("player.png")
print(exp.image.get_width())  # 正常输出图片宽度

2. 初始化分支中未给image赋值

如果__init__里有条件判断,某些分支下self.image未被赋值,会导致它为None:

class Myexperiment:
    def __init__(self, load_img):
        if load_img:
            self.image = pygame.image.load("player.png")
        # 未处理else分支,self.image为None

exp = Myexperiment(False)
exp.image.get_width()  # 报错:'NoneType' object has no attribute 'get_width'

修正:确保所有分支都初始化self.image,比如给默认值或强制加载:

class Myexperiment:
    def __init__(self, load_img=True, default_img="default.png"):
        if load_img:
            self.image = pygame.image.load("player.png").convert_alpha()
        else:
            self.image = pygame.image.load(default_img).convert_alpha()

3. 变量名拼写错误

比如类内初始化的是self.img,但调用时写成了self.image.get_width(),此时self.image是未定义的属性,本质还是非Surface对象。检查变量名拼写一致性即可解决。

排查建议

  1. 在调用get_width()前,打印type(exp.image)确认其类型——如果不是<class 'pygame.Surface'>,说明初始化逻辑有问题。
  2. 检查pygame.image.load()的路径是否正确,路径错误会抛出异常,若未捕获可能导致self.image未被正确赋值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:41:01