問題タブ [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 - Pythonでのモンキーパッチtime.time()
テストのために、time.time()呼び出しを特定のタイムスタンプに置き換える必要があるアプリケーションがあります。これは、過去にrubyを使用して行ったことがあります。
(ここで利用可能なコード:http://github.com/zemariamm/Back-to-Future/blob/master/back_to_future.rb)
ただし、Pythonを使用してこれを行う方法がわかりません。
ヒントはありますか?乾杯、ゼマリア
python - py2app の処方箋
py2appのドキュメントには__boot__.py
、メインの python スクリプトの前に実行される prescripts が記載されています。setup.py ファイルまたはビルド プロセスで任意の prescript を簡単に指定する方法が見つかりませんでした。
__boot__.py
ただし、手動で「ハッキング」し_run(prescript)
て、メインの前に別のコマンドを追加することはできまし_run(main_script)
たが、うまく機能しているように見えました。ただし、標準の py2app ビルド プロセスを使用する方がはるかに優れています。
私が本質的にやろうとしているのは、メイン スクリプトが起動される前に、sites-packages.zip ファイルにモンキー パッチを適用することです。プリスクリプトは基本的に、サーバー上の更新をチェックし、更新がある場合はダウンロードしてから、site-packages.zip ファイルを上書きします。アプリケーションを最初から再インストールするよりもはるかに迅速です。
何か案は?
ruby-on-rails - プラグインによって提供されるメソッドを使用するために、rake タスクでモデルにモンキーパッチを適用しますか?
最近のいくつかのリファクタリング中に、ユーザー アバターの保存方法を変更しましたが、一度展開すると既存のすべてのユーザーに影響を与えることに気づきませんでした。だから今、私はこのようなことをしてこれを修正するためのレーキタスクを書こうとしています。
それを実行しようとすると、 User:Class の未定義のメソッド `has_attached_file' が取得されます
スクリプト/コンソールでこれを行うことができますが、rake タスクから paperclip プラグインのメソッドを見つけることができないようです。
c++ - Lua + SWIG モンキーパッチ
SWIG を使用して一連のクラスを lua にバインドしました。C++ 自体がモンキー パッチをサポートしていないことはわかっています。また、C++ オブジェクトを変更しようとしているのではなく、単にそれらの lua 表現を変更しようとしているだけです。問題は、lua 側で提示された API を変更できるように、Lua テーブルと SWIG によってエクスポートされたオブジェクトにモンキー パッチを適用し始めたい場合に発生します。
たとえば、次の lua コード:
期待どおりに動作しません。その行の後の動作は、GetEnemies2 ではなく、元の GetEnemies1 と一貫性があります。
どうすればこの問題に対処できますか?
c# - C#モンキーパッチ - 可能ですか?
ロード時に別のアセンブリからクラスにメソッドを挿入する C# アセンブリを作成することは可能ですか? はいの場合、注入されたメソッドは、IronPython などの DLR を使用する言語から利用できますか?
私にはその方法が必要であり、可能であれば IronPython の再コンパイルを避けたいと考えています。
ruby - jekyll - github ページで、自動的にページに何かを追加する
Jekyllのページの URL を取得する方法はありますか? about.html
ページとdownload.html
は、次の階層のような非ポスト テキスタイル ファイルを意味します。
私はこのようなことをしたいと思います:
投稿の to_liquid メソッドに URL が含まれているため、これは投稿で機能します。一方、ページにはそのようなものは含まれていないようです-それらには必要なプロパティがあります(またはそう思われます)が、それらをエクスポートしませんto_liquid
; そのように再定義したいと思います。これを行う方法はありますか?
jekyll_extensionsを見つけましたが、ターゲット環境 (github ページ) で動作するかどうかわかりません。
可能であれば、すべての yaml ヘッドに url パラメーターを含める必要は避けたいと思います。
どうもありがとう!
ruby - ルビーの宝石が競合することはありますか?
ruby の初心者として、gem 同士が競合することはあるのだろうかと考えていました。たとえば、2 つの gem が配列の << メソッドをオーバーライドした場合、どちらが勝つでしょうか、それともこれを止めるものはありますか?
ありがとう
ruby - ルビーモンキーパッチの落とし穴
ルビーで基本クラスを拡張するのが得策ではない理由の例を探しています。なぜそれが慎重に使用される武器であるのかを何人かの人々に示す必要があります。
共有できるホラーストーリーはありますか?
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へのポインタを取得しないと、これは実際には不可能だと思いますか?