Задача: Написать свой собственный класс "списков", который мы назовем `Array`
помогите пожалуйста написать данную программу, только начал изучать Python и не до конца понимаю что необходимо сделать, буду очень признателен.
Что должен делать уметь ваш Array?
- Создавать себя как на примере:
Array()- пустой списо,Array(1)= список из одного объекта1,Array(1, 2, 3)- список из трех объектов.Arrayдолжен уметь работать с любым количеством аргументов - Добавлять новый объект внутрь списка через метод
.append() - Складываться с другими
Array. Например:Array(1) + Array(2) == Array(1, 2) - Узнавать свою длину через функцию
len() - Находить индекс переданного объекта через метод
.index(), возвращаем-1, если такого объекта в списке нет. Например:Array('a', 'b').index('b') == 1 - Работать с циклом
for:for element in Array(1, 2, 3):
Ответы (3 шт):
Автор решения: КИТ KIT
→ Ссылка
class Array:
def __init__(self, *args):
self.array = [*args]
def __getitem__(self, item):
return self.array[item]
def __setitem__(self, key, value):
self.array[key] = value
def __len__(self):
return len(self.array)
def __add__(self, other):
return Array(*(self.array.copy() + other.array.copy()))
def __radd__(self, other):
return Array(*(other.array.copy() + self.array.copy()))
def __iadd__(self, other):
self.array += other.array.copy()
return self
def __str__(self):
return str(self.array)
def index(self, element):
return self.array.index(element)
Автор решения: RomanR
→ Ссылка
class Array:
def __init__(self, *args):
self.list = list(args)[:]
def __add__(self, other):
result = Array()
result.list = self.list + other.list
return result
def __radd__(self, other):
result = Array()
result.list = other.list + result.list
return result
def __str__(self):
return "Array(" + str(self.list).strip("[]") + ")"
def __len__(self):
return len(self.list)
def __iter__(self):
self.start = -1
self.end = len(self.list) - 1
return self
def __next__(self):
if self.start >= self.end:
raise StopIteration
else:
self.start += 1
return self.list[self.start]
def append(self, new):
self.list.append(new)
print(self.list)
def index(self, other):
if other in self.list:
return self.list.index(other)
else:
return -1
Все работает, но я только учучь, так что буду рад дельным комментам. Особенно касательно итератора.
Автор решения: S. Nick
→ Ссылка
Добавлю для вас пример, который не использует магические методы. Так, на всякий случай, т.к. действительно не знаю чем вам можно помочь.
class Array():
def __init__(self, *lst):
super().__init__()
self._list = [*lst]
print(self._list)
def _append(self, item):
self._list.append(item)
print(f'append: {self._list}')
def _index(self, item):
try:
_index = self._list.index(item)
print(f'index: {_index}')
except ValueError:
print(f'index: {-1}')
def _len(self):
print(f'len: {len(self._list)}')
# создаем экземпляры класса (Создавать себя)
array = Array()
array_1 = Array(1)
array_1_2_3 = Array(1, 2, 3)
# Добавлять новый объект внутрь списка через метод
array_1._append(42) # append: [1, 42]
# Складываться с другими Array
array._list = array_1._list + array_1_2_3._list
print(array._list) # [1, 42, 1, 2, 3]
# Узнавать свою длину через функцию len()
array._len() # len: 5
# Находить индекс переданного объекта через метод .index()
array._index(42) # index: 1
array._index(142) # index: -1
# Работать с циклом for
for element in array._list:
print(element)