Есть ли способ сделать объект подписанным? - PullRequest
4 голосов
/ 04 апреля 2020

У меня есть пример класса:

class collection:
    def __init__(self, itemArray):
        self.itemArray = itemArray
        self.max = len(itemArray)


    def __iter__(self):
        self.index = 0
        return self

    def __next__(self):
        if self.index < self.max:
            result = self.itemArray[self.index]
            self.index += 1
            return result
        else:
            raise StopIteration()

Моя цель - получить доступ к переменной self.itemArray без явного использования collection.itemArray извне класса. Я хочу иметь возможность l oop над объектом, делая его итеративным, поэтому у меня есть __iter__ и __next__.

Я хочу имитировать c поведение, которое вводит строка использует, ie.

stringVar = "randomTextString"
stringVar[indexVal]

Попытка этого с объектом не будет работать, поскольку это вызовет ошибку TypeError, потому что объекты не являются допустимыми.

Мне просто нужно, чтобы кто-то указал мне на правильное направление. Я посмотрел на python документы для решения, но я не нашел ничего.

1 Ответ

5 голосов
/ 04 апреля 2020

Переопределить магию __getitem__ и __setitem__:

def __getitem__(self, idx):
    return self.itemArray[idx]

def __setitem__(self, idx, val):
    self.itemArray[idx] = val
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...