在类[python]

时间:2017-09-12 00:36:51

标签: python arrays

我编写了自己的List类,它包含了另一个list - 类似的数组类型。阵列具有固定容量,当阵列已满时,我希望容量能够自动加倍。例如,如果我的基本容量为5,那么当阵列已满并且添加了另一个项目时,它会在添加项目之前将容量加倍为10。

这是我的代码:

from referential_array import build_array

class List:

    def __init__(self,capacity):
        assert capacity >0, "Capacity cannot be negative"
        self.count = 0
        self._array = build_array(capacity)
        self.capacity = capacity

    def append(self,item):
        has_space_left = not self.is_full()
        if has_space_left:
            self._array[self.count] = item
            self.count+=1
        else:                                      #Issue here
            create_more_space = List.__init__(self,capacity*2) #if list is full, capacity *2
            self.count+=1

if __name__== "__main__":
    myList = List(6)
    myList.append(4)
    myList.append(7)
    myList.append(1)
    myList.append(3)
    myList.append(2)
    myList.append(17)
    myList.append(18)
    myList.append(20)

下面,首先我指定大小为6.然后我继续追加超过6项。右边,当python看到不再有任何空间时,容量将加倍,因此也可以附加18和20。

我收到错误,说明在追加功能中没有定义容量。我想要的输出是:

4
7
1
3
2
17
18
20

1 个答案:

答案 0 :(得分:0)

错误是因为必须<{1}}引用访问Python 中对象的成员:

self

由于内置的​​python create_more_space = List.__init__(self, self.capacity * 2) 类型具有此功能,我不确定您为什么这样做,所以我假设这是为了学习。在这种情况下,我建议将调整大小拉出到可以从构造函数和list调用的单独方法中。此外,当容量发生变化时,您当前的设置将丢失阵列的内容(因为您将在旧阵列的顶部分配新阵列)。 e.g。

append