Python Crash Course第12章233页:ai_game未定义报错求助
问题解决步骤
核心错误分析与修复
你的代码存在几处关键错误,直接导致ai_game is not defined及其他潜在问题,逐一修复如下:
1. 修正构造函数的定义与参数
- 类的初始化构造函数必须是双下划线的
__init__,你写成了单下划线_init_,Python无法识别这是类的初始化方法 - 你传入的参数是
ai_setting,但代码里调用的是ai_game,参数名要统一,把参数改成ai_game
2. 移除无效导入
import self完全没必要,self是类方法的默认第一个参数,不需要单独导入,直接删除这行代码
3. 补全图片矩形属性初始化
加载图片后必须先获取图片的rect对象,否则self.rect会未定义,添加self.rect = self.image.get_rect()
4. 修正属性名拼写错误
self. Image里多了空格,改成self.image
5. 类名规范(可选但推荐)
Python类名一般采用大驼峰命名法,把ship改成Ship
修复后的完整代码
import pygame class Ship: """管理飞船的类""" def __init__(self, ai_game): self.screen = ai_game.screen self.screen_rect = ai_game.screen.get_rect() # 加载飞船图片并获取其矩形属性 self.image = pygame.image.load('image/dhip.bmp') self.rect = self.image.get_rect() # 将飞船放在屏幕底部中央 self.rect.midbottom = self.screen_rect.midbottom def blitme(self): """在当前位置绘制飞船""" self.screen.blit(self.image, self.rect)
额外说明
ai_game是你主程序中创建的游戏实例(比如教材里的AlienInvasion类对象),后续在主程序中需要把这个实例传入Ship的构造函数,示例如下:# 主程序示例(对应教材主文件) class AlienInvasion: def __init__(self): pygame.init() self.screen = pygame.display.set_mode((1200, 800)) self.ship = Ship(self) # 将当前游戏实例self传入Ship- 确保
image/dhip.bmp路径正确,图片文件需放在项目根目录下的image文件夹中,也可使用绝对路径
内容的提问来源于stack exchange,提问作者Sabrina
相关产品推荐
相关产品推荐

