Heim > Backend-Entwicklung > Python-Tutorial > Was ist Monkey Patching in Python?

Was ist Monkey Patching in Python?

爱喝马黛茶的安东尼
Freigeben: 2020-01-04 17:45:50
nach vorne
3159 Leute haben es durchsucht

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.
Nach dem Login kopieren

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
Nach dem Login kopieren

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()
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:jianshu.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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage