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

Was ist Monkey Patching in Python?

Jan 04, 2020 pm 05:45 PM
python 猴子补丁

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Python vs. C: Anwendungen und Anwendungsfälle verglichen Python vs. C: Anwendungen und Anwendungsfälle verglichen Apr 12, 2025 am 12:01 AM

Python eignet sich für Datenwissenschafts-, Webentwicklungs- und Automatisierungsaufgaben, während C für Systemprogrammierung, Spieleentwicklung und eingebettete Systeme geeignet ist. Python ist bekannt für seine Einfachheit und sein starkes Ökosystem, während C für seine hohen Leistung und die zugrunde liegenden Kontrollfunktionen bekannt ist.

So verwenden Sie Debian Apache -Protokolle, um die Website der Website zu verbessern So verwenden Sie Debian Apache -Protokolle, um die Website der Website zu verbessern Apr 12, 2025 pm 11:36 PM

In diesem Artikel wird erläutert, wie die Leistung der Website verbessert wird, indem Apache -Protokolle im Debian -System analysiert werden. 1. Log -Analyse -Basics Apache Protokoll Datensätze Die detaillierten Informationen aller HTTP -Anforderungen, einschließlich IP -Adresse, Zeitstempel, URL, HTTP -Methode und Antwortcode. In Debian -Systemen befinden sich diese Protokolle normalerweise in /var/log/apache2/access.log und /var/log/apache2/error.log verzeichnis. Das Verständnis der Protokollstruktur ist der erste Schritt in der effektiven Analyse. 2. Tool mit Protokollanalyse Mit einer Vielzahl von Tools können Apache -Protokolle analysiert: Befehlszeilen -Tools: GREP, AWK, SED und andere Befehlszeilen -Tools.

Python: Spiele, GUIs und mehr Python: Spiele, GUIs und mehr Apr 13, 2025 am 12:14 AM

Python zeichnet sich in Gaming und GUI -Entwicklung aus. 1) Spielentwicklung verwendet Pygame, die Zeichnungen, Audio- und andere Funktionen bereitstellt, die für die Erstellung von 2D -Spielen geeignet sind. 2) Die GUI -Entwicklung kann Tkinter oder Pyqt auswählen. Tkinter ist einfach und einfach zu bedienen. PYQT hat reichhaltige Funktionen und ist für die berufliche Entwicklung geeignet.

Laravel (PHP) gegen Python: Entwicklungsumgebungen und Ökosysteme Laravel (PHP) gegen Python: Entwicklungsumgebungen und Ökosysteme Apr 12, 2025 am 12:10 AM

Der Vergleich zwischen Laravel und Python in der Entwicklungsumgebung und dem Ökosystem ist wie folgt: 1. Die Entwicklungsumgebung von Laravel ist einfach, nur PHP und Komponist sind erforderlich. Es bietet eine umfassende Auswahl an Erweiterungspaketen wie Laravelforge, aber die Wartung des Erweiterungspakets ist möglicherweise nicht rechtzeitig. 2. Die Entwicklungsumgebung von Python ist ebenfalls einfach, nur Python und PIP sind erforderlich. Das Ökosystem ist riesig und deckt mehrere Felder ab, aber das Versions- und Abhängigkeitsmanagement kann komplex sein.

PHP und Python: Vergleich von zwei beliebten Programmiersprachen PHP und Python: Vergleich von zwei beliebten Programmiersprachen Apr 14, 2025 am 12:13 AM

PHP und Python haben jeweils ihre eigenen Vorteile und wählen nach den Projektanforderungen. 1.PHP ist für die Webentwicklung geeignet, insbesondere für die schnelle Entwicklung und Wartung von Websites. 2. Python eignet sich für Datenwissenschaft, maschinelles Lernen und künstliche Intelligenz mit prägnanter Syntax und für Anfänger.

Die Rolle von Debian Sniffer bei der DDOS -Angriffserkennung Die Rolle von Debian Sniffer bei der DDOS -Angriffserkennung Apr 12, 2025 pm 10:42 PM

In diesem Artikel wird die DDOS -Angriffserkennungsmethode erörtert. Obwohl kein direkter Antragsfall von "Debiansniffer" gefunden wurde, können die folgenden Methoden zur Erkennung von DDOS -Angriffsanfällen verwendet werden: Effektive DDOS -Angriffserkennungstechnologie: Erkennung auf der Grundlage der Verkehrsanalyse: Identifizierung von DDOS -Angriffen durch Überwachung abnormaler Muster des Netzwerkverkehrs, z. Beispielsweise können Python -Skripte in Kombination mit Pyshark- und Colorama -Bibliotheken den Netzwerkverkehr in Echtzeit überwachen und Warnungen ausstellen. Erkennung auf der Grundlage der statistischen Analyse: Durch Analyse statistischer Merkmale des Netzwerkverkehrs wie Daten

Nginx SSL -Zertifikat -Aktualisierung Debian Tutorial Nginx SSL -Zertifikat -Aktualisierung Debian Tutorial Apr 13, 2025 am 07:21 AM

In diesem Artikel werden Sie begleitet, wie Sie Ihr NginXSSL -Zertifikat auf Ihrem Debian -System aktualisieren. Schritt 1: Installieren Sie zuerst CertBot und stellen Sie sicher, dass Ihr System Certbot- und Python3-CertBot-Nginx-Pakete installiert hat. If not installed, please execute the following command: sudoapt-getupdatesudoapt-getinstallcertbotpython3-certbot-nginx Step 2: Obtain and configure the certificate Use the certbot command to obtain the Let'sEncrypt certificate and configure Nginx: sudocertbot--nginx Follow the prompts to select

Wie Debian Readdir sich in andere Tools integriert Wie Debian Readdir sich in andere Tools integriert Apr 13, 2025 am 09:42 AM

Die Readdir -Funktion im Debian -System ist ein Systemaufruf, der zum Lesen des Verzeichnisgehalts verwendet wird und häufig in der C -Programmierung verwendet wird. In diesem Artikel wird erläutert, wie Readdir in andere Tools integriert wird, um seine Funktionalität zu verbessern. Methode 1: Kombinieren Sie C -Sprachprogramm und Pipeline zuerst ein C -Programm, um die Funktion der Readdir aufzurufen und das Ergebnis auszugeben:#include#include#includeIntmain (intargc, char*argv []) {Dir*Dir; structDirent*Eintrag; if (argc! = 2) {{

See all articles