【问题标题】:Initializing List Attribute of an Object初始化对象的列表属性
【发布时间】:2014-07-03 18:48:52
【问题描述】:

如何初始化对象实例的列表属性?我收到一条错误提示

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

我尝试在 def 行之后立即添加行 "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。

【问题讨论】:

    标签: python list object constructor initialization


    【解决方案1】:

    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
    

    查看其他答案以获得更多 Pythonic 实现。上面显示的代码只需对 OP 的代码进行最少的修改即可解决问题。

    【讨论】:

    • 需要明确的是,从 append 分配返回值(即,正如您所说的 None)不应该导致 AttributeError: 'Particle' object has no attribute 'image' 错误。只有在根本没有 image 属性的情况下才会发生这种情况,这使得很难相信 OP 声称添加 self.image = [] 并没有改变事情。
    • @merlin2011 啊我现在看到了,正在更新 OP
    • @DSM,我想 OP 澄清了这一点。我根据添加self.image = []并没有解决他的问题,但不一定导致同样的错误的推论回答了这个问题。
    【解决方案2】:
    class Particle(object):
        def __init__(self,data,start,finish,width):
            self.image = [data[i] for i in range(start,finish)]
            self.w = width
    

    【讨论】:

    • 为什么另一个没有工作,请参阅另一个答案......基本上追加返回无
    • 你的绝对是 Pythonic! :)
    猜你喜欢
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多