ホームページ > バックエンド開発 > Python チュートリアル > Pythonのモンキーパッチとは何ですか?使い方?

Pythonのモンキーパッチとは何ですか?使い方?

不言
リリース: 2019-03-18 09:40:26
転載
2951 人が閲覧しました

この記事の内容は、Pythonのモンキーパッチとは何ですか?使い方?一定の参考値があるので、困っている友達は参考にしていただければ幸いです。

モンキー パッチとは

モンキー パッチという用語は、既存の 3 番目のパッチにパッチを適用する目的で実行時にクラスまたはモジュールを動的に変更することのみを指します。 - 期待通りに動作しないバグや機能の回避策としてのパーティ コード

つまり、実行時にメソッド/クラス/属性/関数を変更し、元のコードを新しいコードに置き換えます。解決策 一部のプログラムにはパッチが適用されています。

なぜモンキー パッチと呼ばれるのか

モンキー パッチという用語は、コードをこっそり変更することを指し、おそらく他の同様のコードと互換性がないことを指す、初期の用語であるゲリラ パッチに由来しているようです。パッチ – 実行時。ゴリラと同音異義語のゲリラという言葉 (またはそれに近い) が、おそらくパッチの威圧感を和らげるために猿になりました。[1] 別の語源としては、コードを「いじる」こと (いじること) を指します。 ).

一説によると、雑軍やゲリラの英語の発音はオランウータンの発音に似ているという説もあり、雑軍やゲリラは本来の軍隊ではなく、いわば補欠のようなもので、そのため、モンキー パッチとも呼ばれます。別の言い方として、「猿回し」という言葉は、ふざける、いたずらする、なだめることを意味するため、モンキー パッチと呼ばれます

Python でのモンキー パッチの使用

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() # 我要取代你
ログイン後にコピー

例は非常に単純です。 func2 はクラス メソッドを置き換え、func3 はクラス メソッドを置き換えます。 メソッドは例であり、最終出力はオリジナルではありません。

その他の例

を使用すると、モンキー パッチが発生します。 gevent module

import gevent.monkey
 gevent.monkey.patch_all()
ログイン後にコピー

モンキーパッチの使い方ですが、geventはソケット、ssl、スレッド、選択モジュールなど、標準ライブラリのブロッキングシステムコールのほとんどを修正し、協調動作に変更することができます。つまり、Monkeypatch Monkey.patch_xxx() は、Python 標準ライブラリのモジュールまたは関数を、gevent のコルーチンを備えた応答性の高い協調オブジェクトに変更するために使用されます。このようにして、元のコードを変更せずに、アプリケーションのブロック メソッドをコルーチンに変えることができます。
こちらを参照 https://blog.csdn.net/wangjianno2/article/details/51708658

注意事項

モンキー パッチを使用する場合も同様に簡単です問題が発生する バージョンアップするとパッチが破損しやすい 知らずに1箇所に2つのパッチを適用すると入れ替わってしまう パッチがあることを知らない人にとっては混乱するかもしれない. 発生する特定の状況に混乱する

以上がPythonのモンキーパッチとは何ですか?使い方?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート