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

Python中数组存储类实例后,如何访问类变量?

解决Python类实例数组访问实例属性的问题

嘿,我来帮你搞定这个问题!咱们先拆解一下你代码里的两个核心问题:

问题1:数组里存的是类,不是实例

你写的p = [apixel] * 10其实是把apixel这个类本身重复了10次放进数组里,数组里的每个元素都是类对象,而不是类的实例。这就是为什么你调用obj.do_i_exist()暂时能运行(因为你是直接调用类的方法),但访问obj.posx会失败——posx是实例属性,只有当你创建类的实例(也就是调用apixel())时才会被初始化。

问题2:实例方法缺少self参数

你的do_i_exist方法没有定义第一个参数self,这不符合Python实例方法的规则。实例方法必须把实例本身作为第一个参数(惯例叫self),如果是直接用类调用这个方法,虽然暂时没报错,但这不是正确的写法,后续如果用实例调用就会出问题。

修正后的完整代码

import random  # 别忘了导入random模块,不然randint会报错

class apixel(object):
    def __init__(self):
        self.posx = random.randint(0, 300)
        self.posy = random.randint(0, 200)
    def do_i_exist(self):  # 加上self参数
        print("Yes i do!")

# 创建10个类实例,用列表推导式
p = [apixel() for _ in range(10)]

for obj in p:
    obj.do_i_exist()  # 现在是调用实例的方法
    print(obj.posx)   # 正常访问实例属性posx

关键变化说明

  • 用[apixel() for _ in range(10)]替代[apixel] *10:每次循环都会调用apixel()创建一个新的实例,这样数组里的每个元素都是独立的类实例,各自拥有自己的posx和posy。
  • 给do_i_exist方法添加self参数:让它成为标准的实例方法,这样无论是实例调用还是后续扩展都不会出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:35