我编写了自己的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
答案 0 :(得分:0)
错误是因为必须<{1}}引用访问Python 中对象的成员:
self
由于内置的python create_more_space = List.__init__(self, self.capacity * 2)
类型具有此功能,我不确定您为什么这样做,所以我假设这是为了学习。在这种情况下,我建议将调整大小拉出到可以从构造函数和list
调用的单独方法中。此外,当容量发生变化时,您当前的设置将丢失阵列的内容(因为您将在旧阵列的顶部分配新阵列)。 e.g。
append