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

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

不言
不言nach vorne
2019-03-18 09:40:262921Durchsuche

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

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()

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen