J'essaie de comprendre cette définition. Est-ce quelque chose comme la surcharge des méthodes/opérateurs ou la délégation ? A-t-elle quelque chose en commun avec ces choses ?
Réponses
Trop de publicités?Non, ce n'est pas comme toutes ces choses. Il s'agit simplement du remplacement dynamique d'attributs au moment de l'exécution.
Par exemple, considérons une classe qui possède une méthode get_data
. Cette méthode effectue une recherche externe (sur une base de données ou une API web, par exemple), et diverses autres méthodes de la classe l'appellent. Cependant, dans un test unitaire, vous ne voulez pas dépendre de la source de données externe - vous remplacez donc dynamiquement la méthode get_data
avec un stub qui renvoie des données fixes.
Comme les classes Python sont mutables et que 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.
Un MonkeyPatch est un morceau de code Python qui étend ou modifie d'autres d'autres codes au moment de l'exécution (généralement au démarrage).
Un exemple simple ressemble à ceci :
from SomeOtherProduct.SomeModule import SomeClass
def speak(self):
return "ook ook eee eee eee!"
SomeClass.speak = speak
Source : MonkeyPatch page sur le wiki de Zope.
Selon Wikipedia :
En Python, le terme patch de singe ne fait que fait référence aux modifications dynamiques d'une classe ou module au moment de l'exécution, motivées par l'intention de corriger le code existant existant d'une tierce partie comme solution de contournement à un problème. bogue ou une fonctionnalité qui ne fonctionne pas comme comme vous le souhaitez.
Premièrement : le singe Parcheando est un hack maléfique (à mon avis).
Il est souvent utilisé pour remplacer une méthode au niveau du module ou de la classe par une implémentation personnalisée.
Le cas d'utilisation le plus courant est l'ajout d'une solution de contournement pour un bogue dans un module ou une classe lorsque vous ne pouvez pas remplacer le code original. Dans ce cas, vous remplacez le "mauvais" code par un Parcheando de singe avec une implémentation dans votre propre module/package.
Jeff Atwood a écrit un article à ce sujet.