Python >> Tutoriel Python >  >> Python

Patching de singe :le bon ou le mauvais ?

Un écusson de singe est un morceau de code de programmation qui étend ou modifie un autre code à l'exécution . Cela signifie qu'il apporte des modifications à un module ou à une classe pendant que le programme est en cours d'exécution. Ce n'est pas une technique standard pour le développement de logiciels. C'est simplement le remplacement dynamique d'attributs à l'exécution. Cela reste une solution de contournement pour résoudre un problème aigu et présente des inconvénients évidents.

Un exemple simple ressemble à ceci :

from SomeOtherProduct.SomeModule import SomeClass
def speak(self):
return "ook ook eee eee eee!"
SomeClass.speak = speak

Dans l'exemple ci-dessus, si SomeClass ? n'avait pas déjà un speak() méthode, c'est le cas maintenant :-) S'il avait une méthode speak() auparavant, le nouveau code a remplacé l'ancienne définition de méthode.

Les corrections de singe ne peuvent être effectuées que dans des langages dynamiques , dont python est un bon exemple. Parce que les classes Python sont mutables et les méthodes ne sont que des attributs de la classe, vous pouvez le faire autant que vous le souhaitez - et, en fait, vous pouvez même remplacer les classes et les fonctions dans un module exactement de la même manière.

L'exemple de singe Python suivant corrige la valeur de Pi à partir de la bibliothèque mathématique standard.

import math
print(math.pi)
math.pi = 5
print(math.pi)

sortie

3.141592653589793
5
APRÈS LE REDÉMARRAGE
import math
print(math.pi)

sortie

3.141592653589793

Avantages et inconvénients

Comme de nombreux outils de la boîte à outils de programmation, peut être utilisé à la fois pour le bien et pour mauvais . Bien sûr, le monkey patching est utile si vous savez ce que vous faites et n'avez pas le temps d'implémenter un SOLID la solution. Mais vous ne devriez jamais considérer cela comme une technique standard et construisez patch de singe sur patch de singe.

Ceci est considéré comme mauvais car cela signifie que la définition d'un objet ne décrit pas complètement ou précisément son comportement réel. En outre, cela crée un écart entre le code source original sur disque et le comportement observé. Cela peut être très déroutant lors du dépannage, en particulier pour toute personne autre que l'auteur du monkeypatch. Correction de singe est donc une sorte de comportement antisocial.