Heim > Backend-Entwicklung > Python-Tutorial > Was ist Monkey Patching in Python? Wie benutzt man es?

Was ist Monkey Patching in Python? Wie benutzt man es?

不言
Freigeben: 2019-03-18 09:40:26
nach vorne
3025 Leute haben es durchsucht

In diesem Artikel erfahren Sie, was Monkey Patching in Python ist. Wie benutzt man es? Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.

Was ist ein Monkey-Patch?

Der Begriff Monkey-Patch bezieht sich nur auf dynamische Änderungen einer Klasse oder eines Moduls zur Laufzeit, die durch die Absicht motiviert sind, vorhandene Dritte zu patchen -Party-Code als Workaround für einen Fehler oder eine Funktion, die nicht wie gewünscht funktioniert

Das heißt, ändern Sie die Methode/Klasse/das Attribut/die Funktion zur Laufzeit und ersetzen Sie den Originalcode durch den neuen Code als eine Lösung Einige Programme sind gepatcht.

Warum heißt es Monkey Patch?

Der Begriff Monkey Patch scheint von einem früheren Begriff, Guerrilla Patch, abgeleitet zu sein, der sich auf die heimliche Änderung von Code bezog – und möglicherweise inkompatibel mit anderen Codes Patches – zur Laufzeit. Das Wort Guerrilla, das homophon mit Gorilla ist (oder fast so), wurde zu Monkey, möglicherweise um den Patch weniger einschüchternd klingen zu lassen.[1] Eine alternative Etymologie ist, dass es sich auf das „Herumspielen“ mit dem Code bezieht damit ).

Eine Theorie besagt, dass die englische Aussprache von „Miscellaneous Army“ und „Guerillas“ der von Orang-Utans ähnelt. Die „Miscellaneous Army“ und „Guerillas“ sind nicht die ursprüngliche Armee, sie sind lediglich Ersatz. Daher werden sie auch Monkey Patches genannt. Das Sprichwort „monkeying about“ bedeutet Herumalbern, Ungezogenheit oder Überreden, also heißt es Monkey Patch

Affe Patch in Python verwenden

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() # 我要取代你
Nach dem Login kopieren

The Beispiel ist sehr einfach, func2 ersetzt die Klassenmethode, func3 ersetzt sie. Die Methode ist ein Beispiel und die endgültige Ausgabe ist nicht die ursprüngliche.

Andere Beispiele

Bei der Verwendung werden Sie auf Monkey-Patches stoßen das Gevent-Modul

import gevent.monkey
 gevent.monkey.patch_all()
Nach dem Login kopieren

Mit Monkey Patches kann Gevent die meisten blockierenden Systemaufrufe in der Standardbibliothek ändern, einschließlich Socket-, SSL-, Threading- und Select-Module, und sie in kooperativen Betrieb umwandeln. Das heißt, der Monkey-Patch Monkey.patch_xxx() wird verwendet, um die Module oder Funktionen in der Python-Standardbibliothek in reaktionsfähige kollaborative Objekte mit Coroutinen in gevent umzuwandeln. Auf diese Weise kann die Blockierungsmethode der Anwendung in eine Coroutine umgewandelt werden, ohne den ursprünglichen Code zu ändern.
Hier als Referenz: https://blog.csdn.net/wangjianno2/article/details/51708658

Aufmerksamkeitsprobleme

Es ist genauso einfach, wenn man Monkey verwendet Es treten Probleme beim Patchen auf

Wenn Versionsaktualisierungen durchgeführt werden, kann es leicht passieren, dass die Patches an einem Ort beschädigt werden, ohne dass dies zu einem Ersatz führen kann . Verwirrt durch bestimmte Situationen, die auftreten

Das obige ist der detaillierte Inhalt vonWas ist Monkey Patching in Python? Wie benutzt man es?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage