2011-09-21 11 views
9

Chcę dodać metodę do pojedynczego wystąpienia klasy "listy". Przykład:Dodaj metodę do instancji listy w pythonie

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

Wiem, że to nie działa, ale chcę, aby coś takiego działało w ten sposób. Wiem, że to nie jest dobra praktyka i wiem, że powinienem zrobić zupełnie nową klasę, ale myślę, że jest to możliwe w Pythonie i nie zrozumiałem jak.

Jestem świadomy: Dynamically add member function to an instance of a class in Python i Dynamically binding Python methods to an instance correctly binds the method names, but not the method

ale żadna z tych prac z native listy.

Dzięki!

+1

uwaga: nie używaj 'return' dla lambdas. –

+1

Chcesz zrobić 'a.first = lambda: a [0]' lub 'a.first = types.MethodType (lambda self: self [0], a)'. Jeśli dodasz funkcję do obiektu takiego jak ten, Python nie będzie automatycznie wiązał tego obiektu z obiektem. –

+0

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

Odpowiedz

12

Nic nie zadziała z listą rodzimą, ponieważ nie można dodawać metod do typu zdefiniowanego w C. Będziesz musiał wyprowadzić z list i dodać swoją metodę do tej klasy.

+0

oh, to jest całkiem niesamowite ... dzięki :) – rgenito