类创建动态数组[蟒](Creating dynamic array in class [python

2019-10-30 03:05发布

我写我自己的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。然后我继续追加超过600项以上。 由右,当Python看到有不再有任何空间时,容量将增加一倍,因此18和20可以被附加为好。

我收到一个错误说能力不追加功能定义。 我试图让输出是:

4
7
1
3
2
17
18
20

Answer 1:

该错误是因为在Python一个对象的成员必须从被访问self参考:

create_more_space = List.__init__(self, self.capacity * 2)

我不知道为什么你这样做是因为内置Python list类型具有此功能,所以我会认为这是学习。 在这种情况下,我建议拉调整到一个单独的方法,其可从构造被调用和append 。 此外,您的当前设置将失去阵列的内容容量的变化(因为你会被分配在旧顶新阵列)时。 例如

new_array = build_array(capacity)
new_array[0:len(self._array)] = self._array
self._array = new_array


文章来源: Creating dynamic array in class [python]
标签: python arrays