如何在Canvas类的成员函数中访问__init__中声明的变量
问题修复方案
核心问题分析
你的代码存在两个关键错误,导致无法正常访问类实例变量:
create_canvas方法未声明第一个参数self——Python的类实例方法必须以self作为首个参数,否则无法关联到类的实例,自然无法访问self.size这类实例变量。- 内部类
Sprite的__init__方法中,self.sprite.append(self)逻辑错误——此处的self是Sprite类的实例,而非外部Canvas类的实例,无法直接访问Canvas的sprite列表。
修复后的完整代码
class Canvas: def __init__(self, size: list, void): self.size = size self.void = void self.canvas = [] self.camera_pos = [0, 0] self.sprite_priority = [] self.sprite = [] self.distance_from = {} self.distances = [] class Sprite: def __init__(self, canvas_instance, char, position, z_index): self.char = char self.position = position self.z_index = z_index # 通过传入的Canvas实例访问外部类的sprite列表 canvas_instance.sprite.append(self) def create_canvas(self): # 现在可正常访问所有实例变量 get_var = self.size # 后续业务逻辑代码...
关键修改说明
- 补全实例方法的self参数:将
def create_canvas(void):改为def create_canvas(self):,方法内部即可通过self访问Canvas实例的所有变量(如self.size、self.sprite)。 - 修正内部类Sprite的关联逻辑:
- 为
Sprite的__init__方法增加canvas_instance参数,用于传入Canvas类的实例。 - 使用
canvas_instance.sprite.append(self)替代原错误代码,实现将Sprite实例正确添加到Canvas的sprite列表中。
- 为
使用示例
# 创建Canvas实例 my_canvas = Canvas([80, 24], " ") # 创建Sprite实例,传入Canvas实例作为关联 my_sprite = my_canvas.Sprite(my_canvas, "X", [10, 5], 1) # 调用create_canvas方法 my_canvas.create_canvas()
内容的提问来源于stack exchange,提问作者meni meni
相关产品推荐
相关产品推荐

