問題タブ [monkeypatching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - モンキーパッチのstdlibメソッドはPythonの良い習慣ですか?
時間の経過とともに、stdlib
制限を克服したり、不足している機能を追加したりするために、Pythonのいくつかのメソッドをオーバーライドする必要があることに気付きました。
いずれの場合も、ラッパー関数を追加し、モジュールの元のメソッドをラッパーに置き換えました(ラッパーは元のメソッドを呼び出していました)。
なぜ私はこれをしましたか?メソッドへのすべての呼び出しが、他のサードパーティモジュールから呼び出された場合でも、私の新しいバージョンを使用していることを確認してください。
モンキーパッチは悪いことかもしれませんが、私の質問は、注意して使用した場合にこれが役立つかどうかです。つまり:
- 元のモジュールが更新されたときに何も欠落していないことを保証して、元のメソッドを引き続き呼び出します
- メソッドの元の「意味」を変更していません
例:
- Pythonロギングモジュールにカラーリングのサポートを追加します。
- テキストモードを使用するときにopen ()がUnicodeBOMマスクを認識できるようにする
os.system()
またはにロギングサポートを追加しsubprocess.Popen()
ます。コンソールに出力したり、別のファイルにリダイレクトしたりできます。- Windowsのようにプラットフォームにない、
os.chown()
またはos.lchown()
Windowsにないメソッドを実装する。
このようなことをすることは、私にはまともなオーバーライドのように見えますが、他の人がそれらをどのように見ているか、特に許容できるモンキーパッチと見なされるべきものとそうでないものを確認したいと思います。
python - Pythonでポインタ型の動作を取得するにはどうすればよいですか?
関数のリストをテストするテストケースを書きたいと思います。これが私がやりたいことの例です:
達成したいことは次のとおりです。
ステップ1)ローカルメソッド変数をmethod_listの各項目に割り当てます
。ステップ2)メソッドにモンキーパッチを適用します。この例では、mock.Mockオブジェクトを使用しています
実際に発生するのは次のとおりです。
ステップ1)メソッドがmethod_listからアイテムに正常に割り当てられます-OK
ステップ2)メソッドがオブジェクトに割り当てられますMock()-NOK
ステップ2で必要だったのは、method_listからアイテムを取得することでした。たとえばmethod1をMock()オブジェクトに割り当てます。最終的には、methodとmethod1の両方が同じMock()オブジェクトを指すことになります。
私が本質的に行っているのはa=b
a = c
であり、c==bを期待していることに気づきました。
どういうわけかbへのポインタを取得しないと、これは実際には不可能だと思いますか?
f# - F# モジュールにモンキー パッチを適用できますか?
簡単な質問です。List モジュールなどに関数を追加したい場合は、その関数を使用して新しい List モジュールを定義できることを読んだところです。
foo
これはメインの List モジュールに追加する効果がありますか、それとも新しい を明示的に開く必要がありますList
か? 前者は Ruby の「モンキー パッチ」のようです。後者は拡張メソッドに似ていると思います。
(私はこれを試してみたいと思いますが、コンパイラの近くにはいません。)
python - モンキーパッチPythonクラス
別のモジュールにあるクラスがありますが、変更することはできません。
これは、このファイル以外の場所ではMyClassを変更しません。ただし、このようなメソッドを追加すると
これは機能し、fooメソッドは他のどこでも利用できるようになります。
クラスを完全に置き換えるにはどうすればよいですか?
python - クラスをモンキーパッチで置き換えるにはどうすればよいですか?
ORM クラスを置き換えるにはどうすればよいですか - 再帰が発生しないはずです!!!
問題:
元のクラスにスーパー コールがあり、それが置き換えられると、自己継承が発生し、最大再帰深度超過例外が発生します。
つまり、クラス orm は super(orm, self).... を呼び出しており、orm は元の orm.... を継承する別のクラスに置き換えられています。
パッケージ !
orm.py の内容
addons /init.py の内容
addons/test.py の内容
test_app1.py の内容
run_app.py の内容
出力
似たような質問を見たことがある
ruby-on-rails - Ruby on Rails でモンキー パッチを適用する方法は?
実際の例を使用してみましょう。
WillPaginate::LinkRenderer.to_html メソッドにモンキー パッチを適用したい。
これまでのところ、私は試しました:
- フォルダにファイルを作成しました: lib/monkeys/will_paginate_nohtml.rb
- config/environments.rb に追加: ファイルの最後に「monkeys/will_paginate_nohtml」が必要
- そのファイルの中には、これが私のコードでした:
e
しかし、どういうわけか、デバッガーは通過しません。パッチ適用に失敗したようです。
どんな助けでも大歓迎です、ありがとう!
ruby - ルビーのURI.parseメソッドにモンキーパッチを適用するにはどうすればよいですか
一部の人気のあるブログサイトは通常、URLに角かっこを使用しますが、rubyの組み込みURI.parse()メソッドがそれらをチョークし、次のように厄介な例外を発生させます:http: //redmine.ruby-lang.org/issues/show/ 1466
角かっこでURLを適切に処理する単純なモンキーパッチを作成しようとしています。以下は私がこれまでに持っているものです:
ただし、実行すると、エラーが発生します。
/Library/Ruby/Gems/1.8/gems/activesupport-2.3.8/lib/active_support/core_ext/module/aliasing.rb:33:in alias_method:NameError:undefined method'parse' for module'URI'
URI.parseを正常にモンキーパッチするにはどうすればよいですか?
python - モンキーパッチをDjangoフォームクラスに適用しますか?
フォームクラス(巨大なDjangoアプリのどこか深いところ)が与えられます。
また、フォームクラス自体を拡張または変更せずに、このフォームに別のフィールドを追加したい場合、次のアプローチが機能しないのはなぜですか。
(私の最初の推測では、Djangoが使用するメタクラスハッカーは、フォームクラスが初めて構築されたときにのみ適用されます。そうであれば、これを克服するためにクラスを再宣言する方法はありますか?)
ruby-on-rails - Rails でのモンキーパッチ
モンキーパッチは良い開発方法ですか? たとえば、gem をフォークしてフォークされたプロジェクトにパッチを作成するのではなく、いつモンキーパッチを適用する必要がありますか?
ruby - Ruby用のモンキーパッチを書くにはどうすればよいですか?
Rails 3を使用していますが、次のようなエラーが発生します。
この問題を解決するためにモンキーパッチを適用したいと思います。まず第一に:それはどのように見えるはずですか?RubyのソースコードでのArrayクラスのネストについてはほとんど知りません。ガイダンスをいただければ幸いです。