, поэтому я не могу понять, как перегрузить операторы __getitem__
и __setitem__
для двойной индексации в моем классе. Я пытаюсь перебрать пользовательский атрибут экземпляра, который представляет собой набор из 2 кортежей, например self.coeffs = ((6,2),(5,5),(1,8))
, где первый индекс - это 2 кортежа, а второй - это первый или второй элемент в 2-кортеж Для предыдущего объекта self.coeffs[2][0]
будет 1
.
Я почти уверен, что понимаю, как настроить методы для одного индекса, но я не знаю, как заставить Python рассмотреть второй вызов индекса.
Вот раздел моего класса (self.coeffs
- это атрибут экземпляра, созданный из пользовательских кортежей):
Там, где класс впервые вызывает операторы индекса:
`def __str__(self):
if self.__coeffs[0][1] == 0: #TypeError: 'int' object isn't subscriptable
return str((self.__coeffs)[0][0])`
Мои текущие операторы индекса:
`def __getitem__(self, idx):
for t in self.__coeffs:
if t[1] == idx:
return t[0]
if idx not in [t[1] for t in self.__coeffs]:
return 0
def __setitem__(self, idx, value):
for t in self.__coeffs:
if t[1] == idx:
t[0] = value
if idx not in [t[1] for t in self.__coeffs]:
self.addterm(value, exp)`
Кроме того, у меня должен быть один параметр idx
для __getitem__
, я не могу передать больше, чем этот единственный аргумент. Если кто-то знает, как обойти это или есть какие-либо предложения, это будет высоко ценится, спасибо.