Maison > développement back-end > Tutoriel Python > Qu'est-ce que le patch singe en Python

Qu'est-ce que le patch singe en Python

爱喝马黛茶的安东尼
Libérer: 2020-01-04 17:45:50
avant
3154 Les gens l'ont consulté

Qu'est-ce que le patch singe en Python

Le remplacement dynamique des attributs au moment de l'exécution est appelé un patch de singe.

Pourquoi s'appelle-t-on patch de singe ?

Le remplacement des attributs à l'exécution n'a rien à voir avec les singes. Il y a deux opinions sur l'origine. de Monkey Patch trouvé en ligne. :

1. Ce mot était à l'origine Guerrilla Patch, une armée diverse et une armée de guérilla, ce qui montre que cette partie n'est pas originale. En anglais, la prononciation de guerilla est similaire à gollia (. orang-outan), et plus tard il a été écrit singe (singe).

2. Une autre explication est que parce que cette méthode gâche le code original (le déranger), elle est appelée Monkeying about (naughty) en anglais, c'est pourquoi elle s'appelle Monkey Patch.

Le nom de Monkey Patch prête un peu à confusion, tant qu'il correspond à la "fonction de remplacement du runtime de module".

Utilisation du patch singe

1. Méthode de remplacement dynamique des modules au moment de l'exécution

stackoverflow Il existe deux exemples populaires ci-dessus

consider a class that has a method get_data. This method does an
external lookup (on a database or web API, for example), and various
other methods in the class call it. However, in a unit test, you don't
want to depend on the external data source - so you dynamically
replace the get_data method with a stub that returns some fixed data.
Copier après la connexion

Supposons qu'une classe ait une méthode get_data. Cette méthode effectue certaines requêtes externes (telles que l'interrogation de la base de données ou de l'API Web, etc.), et de nombreuses autres méthodes de la classe l'appellent. Cependant, dans un test unitaire, vous ne souhaitez pas vous fier à des sources de données externes. Vous remplacez donc cette méthode get_data par un état de méthode stupide, qui renvoie simplement quelques données de test.

Un autre exemple cité est l'explication de Monkey Patch sur le wiki Zope :

from SomeOtherProduct.SomeModule import SomeClass
def speak(self):
    return "ook ook eee eee eee!"
SomeClass.speak = speak
Copier après la connexion

Il existe également un exemple plus pratique. De nombreux codes utilisent import json. Plus tard, il a été constaté que ujson avait une valeur supérieure. Si vous pensez qu'il est plus coûteux de modifier l'importation json de chaque fichier pour importer ujson en tant que json, ou si vous souhaitez tester si le remplacement de json par ujson est comme prévu, il vous suffit d'ajouter :

import json
import ujson
def monkey_patch_json():
    json.__name__ = 'ujson'
    json.dumps = ujson.dumps
    json.loads = ujson.loads
monkey_patch_json()
Copier après la connexion
<.>

2. Il existe de nombreuses façons d'ajouter dynamiquement des modules pendant l'exécution

Ce scénario est également courant. Par exemple, si nous référençons un module dans la bibliothèque générale de l'équipe et que nous souhaitons enrichir la bibliothèque. fonctions du module, en plus de l'héritage, on peut également envisager d'utiliser Monkey Patch.

Personnellement, je pense que si Monkey Patch apporte de la commodité, il risque également de gâcher l'élégance du code source.

Site Web PHP chinois, il existe de nombreux

tutoriels vidéo Python gratuits, tout le monde est invité à apprendre !

Cet article est reproduit à partir de : https://www.jianshu.com/p/a19f936471e4

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:jianshu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal