実行時の属性の動的な置換は、モンキー パッチと呼ばれます。
#なぜモンキー パッチと呼ばれるのか
#ランタイムの属性置換はサルとは何の関係もありません。その起源については 2 つの意見があります。オンラインで見つかったモンキー パッチの。 : 1. この単語はもともとゲリラ パッチ (雑多な軍隊、ゲリラ軍) でした。つまり、この部分がオリジナルではありません。英語では、ゲリラの発音はゴリア (オランウータン)、後に猿(サル)と表記されるようになりました。 2. もう一つの説明は、この方法は元のコードをめちゃくちゃにする(いじる)ため、英語ではMonkeying About(いたずら)と呼ばれるため、Monkey Patchと呼ばれるというものです。 モンキーパッチという名前は、「モジュールランタイム置き換えの機能」に相当するものなので、ちょっとわかりにくいです。モンキーパッチの使い方
1. 実行時に動的にモジュールを入れ替える方法
stackoverflowconsider 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.クラスに get_data メソッドがあるとします。このメソッドは、いくつかの外部クエリ (データベースや Web API へのクエリなど) を実行し、クラス内の他の多くのメソッドがそれを呼び出します。ただし、単体テストでは、外部データ ソースに依存したくありません。そこで、この get_data メソッドを、テスト データを返すだけのダム メソッド状態に置き換えます。 別の引用例は、Zope wiki の Monkey Patch の説明です:
from SomeOtherProduct.SomeModule import SomeClass def speak(self): return "ook ook eee eee eee!" SomeClass.speak = speakさらに実践的な例もあります。多くのコードは import json を使用しています。後で、ujson の方がパフォーマンスが高いことが判明しました。 ujson を json としてインポートするように各ファイルのインポート json を変更するほうがコストがかかると感じる場合、または json を ujson に置き換えることが期待どおりかどうかをテストしたい場合は、次を追加するだけです:
import json import ujson def monkey_patch_json(): json.__name__ = 'ujson' json.dumps = ujson.dumps json.loads = ujson.loads monkey_patch_json()入口の
2。実行時にモジュールを動的に追加する方法はたくさんあります。
このようなシナリオはたくさんあります。たとえば、チームの一般ライブラリ内のモジュールを参照し、モジュールの機能を充実させるには、継承だけでなくMonkey.Patchの利用も検討できます。 個人的には、Monkey Patch は利便性をもたらしますが、ソース コードの優雅さを台無しにする危険性もあると感じています。 PHP 中国語 Web サイトには、無料のPython ビデオ チュートリアル が多数あり、誰でも学習することができます。
から転載されました。
以上がPython のモンキーパッチとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。