2011-10-25 3 views
0

Предположим, у меня есть класс X, который имеет 2 атрибута: i и j.subscriptip с двумя аргументами в python

Я хочу иметь:

x = X((1,2,3),(2,3,4)) #this would set i to (1,2,3) and j to (2,3,4) 

теперь я хочу индексацию работать следующим образом:

a, b = x[1,2] #a should now be 2 and b should now be 3 

На данный момент я пытаюсь это:

def __getitem__(self, i, j): 
     return self.x[i] , self.y[j] 

Однако это продолжает давать мне ошибку, что getitem занимает ровно 3 элемента nts, ​​но 2 (при попытке распечатать x [1,2])

ответ

5

Comma является оператором упаковки кортежей. x[1, 2] звонки x.__getitem__((1, 2)).

def __getitem__(self, ij): 
    i, j = ij 
    return self.x[i], self.y[j] 
+0

Вау, это было быстро .. Не могли бы вы дать мне указатель на то, где это объясняется более подробно? –

+0

@ArnabDatta: 'T * ptr = & internet;'. Серьезно, однако, я бы предположил, что кортежи объясняются в любом учебнике Python. –

+0

назовите меня noob, но я пробовал искать в интернете __getitem__ с несколькими параметрами, подписываться с несколькими параметрами, и без всяких ведомостей просмотрел объяснения метода getitem. Тот факт, что запятая является оператором упаковки кортежей, не является очевидным для кого-то нового для python, поэтому сарказм точно не получил в этом случае. –