2011-06-26 15 views
18

Chciałbym być w stanie uzyskać dostęp do niektórych wartości od obiektu Pythona przy użyciu składni tablic-like, czyli:Wdrożenie list-jak dostęp indeksu w Pythonie

obj = MyClass() 
zeroth = obj[0] 
first = obj[1] 

Czy to możliwe? Jeśli tak, w jaki sposób można to zaimplementować w klasie python?

+2

Wygląda na to, że dla tych osób używa się indeksowania. – PeterJCLaw

+0

O ile listy w pythonie nie są takie (nie jestem pewien - rzadko go używam), może powinieneś umieścić indeksowanie w tytule zamiast na liście? –

+1

@Merlyn, listy rzeczywiście są takie i nie tylko. Dodane w każdym razie. – PeterJCLaw

Odpowiedz

30

Musisz napisać lub zastąpić __getitem__, __setitem__ i __delitem__.

Tak na przykład:

class MetaContainer(): 
    def __delitem__(self, key): 
     self.__delattr__(key) 
    def __getitem__(self, key): 
     return self.__getattribute__(key) 
    def __setitem__(self, key, value): 
     self.__setattr__(key, value) 

Jest to bardzo prosta klasa, która umożliwia dostęp do indeksowanego jego atrybutów.

2

Użyj metod __getitem__ i __setitem__.

class MyClass: 
    def __getitem__(self, key): 
     return some_value_related_to_key 

    def __setitem__(self, key, value): 
     # set value (if needed) 
Powiązane problemy