53 votes

Créer un objet python auquel on peut accéder avec des crochets

Je voudrais créer une nouvelle classe qui agisse comme un type spécial de conteneur pour les objets, et à laquelle on peut accéder en utilisant des crochets.

Par exemple, supposons que j'ai une classe appelée ListWrapper . Supposons que obj est un ListWrapper . Quand je dis obj[0] je m'attends à ce que la méthode obj.access() à appeler avec 0 comme argument. Ensuite, je peux retourner ce que je veux. Est-ce possible ?

93voto

Acorn Points 16562

Vous voulez définir le spécial __getitem__ [docs] méthode.

class Test(object):     
    def __getitem__(self, arg):
        return str(arg)*3

test = Test()

print test[0]
print test['kitten']

Résultat :

000
kittenkittenkitten

11voto

Michael Dillon Points 18741

Les objets standard de Python possèdent une série de méthodes nommées __something__ qui sont principalement utilisés pour vous permettre de créer des objets qui s'accrochent à une API dans la langue. Par exemple __getitem__ y __setitem__ sont des méthodes qui sont appelées pour obtenir ou définir des valeurs à l'aide de la fonction [] notation. Vous trouverez ici un exemple de création de quelque chose qui ressemble à une sous-classe du dictionnaire Python : https://github.com/wavetossed/mcdict

Notez qu'il ne sous-classe pas réellement le dictionnaire et qu'il possède également une fonction update méthode. Ces deux méthodes sont nécessaires si vous voulez que votre classe se fasse passer pour un dictionnaire Python.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X