Maison >développement back-end >Tutoriel Python >Qu'est-ce que le patch singe en python ? Comment l'utiliser ?

Qu'est-ce que le patch singe en python ? Comment l'utiliser ?

不言
不言avant
2019-03-18 09:40:262959parcourir

Le contenu de cet article porte sur qu'est-ce que le patching singe en Python ? Comment l'utiliser ? Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

Qu'est-ce que Monkey Patch

Le terme Monkey Patch fait uniquement référence aux modifications dynamiques d'une classe ou d'un module au moment de l'exécution, motivées par l'intention de patcher des tiers existants. -code de partie comme solution de contournement à un bug ou une fonctionnalité qui n'agit pas comme souhaité

C'est-à-dire, modifiez la méthode/classe/attribut/fonction au moment de l'exécution et remplacez le code d'origine par le nouveau code comme une solution Certains programmes sont patchés.

Pourquoi s'appelle-t-on patch de singe

Le terme patch de singe semble provenir d'un terme antérieur, patch de guérilla, qui faisait référence à un changement de code sournois – et peut-être de manière incompatible avec d'autres termes similaires. patchs – au moment de l'exécution. Le mot guérilla, homophonique avec gorilla (ou presque), est devenu singe, peut-être pour rendre le patch moins intimidant. avec lui ).

Une théorie est que la prononciation anglaise de l'armée diverse et des guérilleros est similaire à celle des orangs-outans L'armée diverse et les guérilleros ne sont pas l'armée d'origine, ils sont juste comme des substituts, ils sont donc aussi appelés patchs de singe. Une autre façon Le dicton « faire du singe » signifie s'amuser, être méchant ou cajoler, c'est pourquoi on l'appelle patch de singe

Utiliser le patch de singe en python

class Example():
    def func1(self):
        print('我才是原装')def func2(*args):
    print('我要取代你')def func3(*args):
    print('都给我一边去')
instance = Example()
Example.func1 = func2
instance.func1() # 我要取代你instance.func1 = func3
instance.func1() # 都给我一边去instance2 = Example()
instance2.func1() # 我要取代你

L'exemple est très simple, func2 remplace la méthode de classe, func3 remplace la méthode d'instance et la sortie finale n'est pas celle d'origine

Autres exemples

Vous rencontrerez des correctifs de singe lors de l'utilisation du module gevent

import gevent.monkey
 gevent.monkey.patch_all()

Utiliser singe Grâce aux correctifs, gevent peut modifier la plupart des appels système bloquants dans la bibliothèque standard, y compris des modules tels que socket, ssl, threading et select, et les changer en fonctionnement coopératif. Autrement dit, Monkey Patch Monkey.patch_xxx() est utilisé pour modifier les modules ou fonctions de la bibliothèque standard Python en objets collaboratifs réactifs avec des coroutines dans gevent. De cette façon, la méthode de blocage de l'application peut être transformée en coroutine sans changer le code d'origine.
Ici pour référence https://blog.csdn.net/wangjianno2/article/details/51708658

Problèmes d'attention

C'est tout aussi simple lorsque vous utilisez Monkey Des problèmes de patch se produisent

Lorsque des mises à jour de version sont effectuées, il est facile d'endommager les correctifs. L'application de deux correctifs à un seul emplacement sans le savoir entraînera un remplacement. Cela peut être dangereux pour les personnes qui ne savent pas qu'il existe des correctifs. . Confus par certaines situations qui se présentent

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer