Ajout dynamique de méthode et functools.partial
Bonjour,
Je suis récemment tombé sur ce que je pense être une bizarrerie en essayant d'ajouter des méthodes à la volée à une classe. Voici un bout de code qui reproduit mon problème en Python 2.7:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| from functools import partial
def print_var(obj, var):
print obj.__class__.__name__ + ": " + var
class VarPrint(object):
pass
VarPrint.print_something = lambda obj: print_var(obj, "something")
VarPrint.print_something_else = partial(print_var, var="something else")
a = VarPrint()
a.print_something()
partial(print_var, var="another one")(a)
a.print_something_else() |
avec pour résultat
Code:
1 2 3 4 5 6 7
|
VarPrint: something
VarPrint: another one
Traceback (most recent call last):
...
a.print_something_else()
TypeError: print_var() takes exactly 2 arguments (1 given) |
Pourquoi l'utilisation de partial ne fonctionne pas comme attendu ?