2011-09-21 12 views
9

Desidero aggiungere un metodo a una singola istanza della classe 'elenco'. Esempio:Aggiungere un metodo a un'istanza di elenco in python

a = [1,2] 
a.first = lambda self: return self[0] 

So che questo non funziona, ma voglio qualcosa del genere funziona così. So che non è una buona pratica, e so che dovrei fare una classe completamente nuova, ma penso che sia possibile in Python e non ho capito come.

Sono a conoscenza di: Dynamically add member function to an instance of a class in Python e Dynamically binding Python methods to an instance correctly binds the method names, but not the method

ma nessuno di coloro che il lavoro con una lista nativo.

Grazie!

+1

nota: non utilizzare 'return' per lambda. –

+1

Si desidera eseguire 'a.first = lambda: a [0]' o 'a.first = types.MethodType (lambda self: self [0], a)'. Se aggiungi una funzione a un oggetto come questo, Python non lo collegherà automaticamente all'oggetto. –

+0

Vedere http://stackoverflow.com/questions/6738987/extension-method-for-python-built-in-types – OlivierBlanvillain

risposta

12

Nulla funzionerà con un elenco nativo, poiché non è possibile aggiungere metodi a un tipo definito in C. È necessario derivare da list e aggiungere il proprio metodo a tale classe.

+0

oh ya, questo è davvero fantastico ... grazie :) – rgenito

Problemi correlati