Heim > Artikel > Backend-Entwicklung > Was ist Monkey Patching in Python?
Das dynamische Ersetzen von Attributen zur Laufzeit wird als Monkey Patch bezeichnet.
Warum heißt es Monkey Patch?
Das Ersetzen von Attributen zur Laufzeit hat nichts mit Monkeys zu tun. Über den Ursprung gibt es zwei Meinungen von „affe patch“ online gefunden. :
1. Dieses Wort war ursprünglich „Guerrilla Patch“, eine Mischung aus „Armee“ und „Guerilla-Armee“, was bedeutet, dass dieser Teil im Englischen nicht „original“ ist ( Gorilla), und später wurde es als Affe (Affe) geschrieben.
2. Eine weitere Erklärung ist, dass diese Methode im Englischen Monkeying about (naughty) und daher Monkey Patch heißt, weil sie den ursprünglichen Code durcheinander bringt.
Der Name des Monkey-Patches ist etwas verwirrend, solange er der „Modul-Laufzeit-Ersatzfunktion“ entspricht.
Verwendung von Monkey Patch
1. Methode zum dynamischen Ersetzen von Modulen zur Laufzeit
Stackoverflow Oben gibt es zwei beliebte Beispiele.
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.
Angenommen, eine Klasse hat eine Methode get_data. Diese Methode führt einige externe Abfragen durch (z. B. Abfragen der Datenbank oder der Web-API usw.) und wird von vielen anderen Methoden in der Klasse aufgerufen. Bei einem Unit-Test möchten Sie sich jedoch nicht auf externe Datenquellen verlassen. Sie ersetzen also diese get_data-Methode durch einen dummen Methodenstatus, der lediglich einige Testdaten zurückgibt.
Ein weiteres zitiertes Beispiel ist die Erklärung von Monkey Patch im Zope-Wiki:
from SomeOtherProduct.SomeModule import SomeClass def speak(self): return "ook ook eee eee eee!" SomeClass.speak = speak
Es gibt auch ein praktischeres Beispiel. Später wurde festgestellt, dass ujson höher ist Wenn Sie der Meinung sind, dass es teurer ist, den Import-JSON jeder Datei zu ändern, um UJSON als JSON zu importieren, oder wenn Sie testen möchten, ob das Ersetzen von JSON durch UJSON wie erwartet ist, müssen Sie nur Folgendes hinzufügen:
import json import ujson def monkey_patch_json(): json.__name__ = 'ujson' json.dumps = ujson.dumps json.loads = ujson.loads monkey_patch_json()
2. Es gibt viele Möglichkeiten, Module während der Laufzeit dynamisch hinzuzufügen
Dieses Szenario kommt auch häufig vor, wenn wir beispielsweise auf ein Modul in der allgemeinen Bibliothek des Teams verweisen und dieses anreichern möchten Für die Funktionen des Moduls können wir neben der Vererbung auch die Verwendung von Monkey Patch in Betracht ziehen.
Ich persönlich bin der Meinung, dass Monkey Patch zwar Komfort bietet, aber auch die Gefahr birgt, die Eleganz des Quellcodes zu beeinträchtigen.
PHP-Website auf Chinesisch, es gibt viele kostenlose Python-Video-Tutorials, jeder ist herzlich zum Lernen eingeladen!
Dieser Artikel wurde reproduziert von: https://www.jianshu.com/p/a19f936471e4
Das obige ist der detaillierte Inhalt vonWas ist Monkey Patching in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!