Python Language Singe Patching


Exemple

Dans ce cas, "patching singe" signifie l'ajout d'une nouvelle variable ou méthode à une classe après sa définition. Par exemple, disons que nous avons défini la classe A comme

class A(object):
    def __init__(self, num):
        self.num = num

    def __add__(self, other):
        return A(self.num + other.num)

Mais maintenant, nous voulons ajouter une autre fonction plus tard dans le code. Supposons que cette fonction est la suivante.

def get_num(self):
    return self.num

Mais comment ajouter cela comme méthode dans A ? C'est simple, nous plaçons essentiellement cette fonction dans A avec une déclaration d'affectation.

A.get_num = get_num

Pourquoi ça marche? Parce que les fonctions sont des objets comme n'importe quel autre objet, et que les méthodes sont des fonctions appartenant à la classe.

La fonction get_num doit être disponible pour tous les existants (déjà créés) ainsi que pour les nouvelles instances de A

Ces ajouts sont disponibles automatiquement sur toutes les instances de cette classe (ou de ses sous-classes). Par exemple:

foo = A(42)

A.get_num = get_num

bar = A(6);

foo.get_num() # 42

bar.get_num() # 6

Notez que, contrairement à d'autres langages, cette technique ne fonctionne pas pour certains types intégrés et n'est pas considérée comme un bon style.