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

如何在Canvas类的成员函数中访问__init__中声明的变量

问题修复方案

核心问题分析

你的代码存在两个关键错误,导致无法正常访问类实例变量:

  1. create_canvas方法未声明第一个参数self——Python的类实例方法必须以self作为首个参数,否则无法关联到类的实例,自然无法访问self.size这类实例变量。
  2. 内部类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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:40:16