setitem and getitem -- python

class, python

Solution

You have several problems:

`extend` is appending essentially a new vector to the end of the original, rather than increasing the length of the original. It's not clear that it needs to return a string representation of the modified vector (unless it's just for debugging purposes).

def extend(self, newlength):
    # Assume newlength is greater than the old
    self.vector.extend([0] * (newlength - len(self)))

`__setitem__` needs to call `extend` if the key is too large.

def __setitem__(self, key, item):
    if key >= len(self):
        self.vector.extend(key+1)
    self.vector[key] = item

`__getitem__` needs to access the underlying list, not use an undefined attribute

def __getitem__(self, key):
    # It's probably better to catch any IndexError to at least provide
    # a class-specific exception
    return self.vector[key]

Problem

I've created a python program that makes a vector. Now i want to set an item using a function`__setitem__` and`__getitem__`. So for example, if`vector = Vec()`and`vector[3] = 26`would change an empty vector to`[0, 0, 0, 26]`. I need to override the`__getitem__`and`__setitem__` I've listed the code below, but i'm having troubles with the get and set functions. Any advice? ``` class Vec: def __init__(self, length = 0): self.vector = [0]*length def __str__(self): return '[{}]'.format(', '.join(str(i) for i in self.vector)) #This formats the output according to the homework. #Adds '[' and ']' and commas between each 0 def __len__(self): return len(self.vector) def extend(self, newLen): self.vector.append([0]*newLen) return (', '.join(str(j) for j in self.vector)) def __setitem__(self, key, item): self.vector[key] = item def __getitem__(self, key): return self.vector[key] ```

Original source

Related problems