初始化对象的列表属性

-1 投票
2 回答
1410 浏览
提问于 2025-04-18 12:02

我该如何为一个对象的实例初始化一个列表属性?我收到一个错误提示,内容是:

AttributeError: 'Particle' object has no attribute 'image'

我尝试在定义函数的那一行后面加上 "self.image = []" 这一行,但没有任何变化,还是同样的错误。

class Particle(object):
    def __init__(self,data,start,finish,width):
        for i in range(start,finish):
            self.image = self.image.append(data[i])
        self.w = width

prtlist = prtlist.append(Particle(samples,int(indices[0]),int(indices[1]),widthcount))

为了简洁,我没有贴出所有代码。data 是一个整数列表,startfinishwidth 都是整数。

编辑:

如果不先声明 self.image = [],这个属性就不存在;加上之后,虽然有了这个变量,但它的类型是 None,所以没有 append 这个功能。

2 个回答

3

这段代码的意思是……

首先,它定义了一个变量,这个变量用来存储一些信息。接下来,它会执行一些操作,比如计算、判断或者循环。最后,它可能会输出结果,让我们看到这些操作的结果是什么。

在编程中,变量就像一个盒子,我们可以把东西放进去,也可以随时拿出来查看或修改。操作就像是对这些盒子里的东西进行处理,输出则是把处理后的结果展示给我们。

总之,这段代码的核心就是通过一些简单的步骤,来完成特定的任务。

class Particle(object):
    def __init__(self,data,start,finish,width):
        self.image = [data[i] for i in range(start,finish)]
        self.w = width
3

append这个方法会返回None,也就是说它不会给你返回一个新的列表。在init函数的开头,你应该先初始化一个列表。之后,只需要把新内容加到这个列表里,而不需要去接收它的返回值。

    def __init__(self,data,start,finish,width):
        self.image = []
        for i in range(start,finish):
            self.image.append(data[i])
        self.w = width

想要更符合Python风格的写法,可以看看其他的回答。上面这段代码只是简单地修复了原作者代码的问题,修改很少。

撰写回答