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 python : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?