I want to implement my own type of list called Stack. I also want to add slicing functionality with the __getitem__ method like so:
class Stack():
def __init__(self):
self.items = []
def __getitem__(self, slc):
return self.items[slc]
def append(self, item):
self.items.append(item)
Now if I create a Stack instance and append some elements to it I get the Stack type:
st = Stack()
st.append('hi')
st.append('bye')
st.append('hello')
print(type(st)) # Stack type
but if I slice my Stack, it becomes a list again:
st_sliced = st[1:2] print(type(st_sliced)) # List type
how can I make st_sliced to stay Stack type after slicing?
Advertisement
Answer
return self.items[slc] return a list – this is why the type is not a Stack anymore.
The code below keep the type as Stack.
class Stack:
def __init__(self, items=None):
if items is None:
items = []
self.items = items
def __getitem__(self, slc):
return Stack(self.items[slc])
def append(self, item):
self.items.append(item)
st = Stack()
st.append('hi')
st.append('bye')
st.append('hello')
print(type(st))
st_sliced = st[1:2]
print(type(st_sliced))