タグ付けされた質問 「monkeypatching」



3
モンキーがインスタンスメソッドにパッチを適用するときに、オーバーライドされたメソッドを新しい実装から呼び出すことができますか?
クラスのメソッドにサルのパッチを適用しているとしましょう。オーバーライドするメソッドからオーバーライドされるメソッドを呼び出すにはどうすればよいですか?すなわち少し何かsuper 例えば class Foo def bar() "Hello" end end class Foo def bar() super() + " World" end end >> Foo.new.bar == "Hello World"

24
プロパティをクラスに動的に追加する方法は?
目標は、db結果セットのように動作するモッククラスを作成することです。 したがって、たとえば、データベースクエリがdict式を使用して返された場合{'ab':100, 'cd':200}、次のようにしたいと思います。 >>> dummy.ab 100 最初私は多分この方法でそれができると思った: ks = ['ab', 'cd'] vs = [12, 34] class C(dict): def __init__(self, ks, vs): for i, k in enumerate(ks): self[k] = vs[i] setattr(self, k, property(lambda x: vs[i], self.fn_readyonly)) def fn_readonly(self, v) raise "It is ready only" if __name__ == "__main__": c = C(ks, …

9
関数をラップする前にPythonデコレータにパッチを適用できますか?
PythonMockライブラリを使用してテストしようとしているデコレータを備えた関数があります。mock.patch実際のデコレータを、関数を呼び出すだけのモックの「バイパス」デコレータに置き換えるために使用したいと思います。 私が理解できないのは、実際のデコレータが関数をラップする前にパッチを適用する方法です。パッチターゲットでいくつかの異なるバリエーションを試し、パッチとインポートステートメントを並べ替えましたが、成功しませんでした。何か案は?

5
1匹のサルがPythonの関数にどのようにパッチを当てますか?
別のモジュールの関数を別の関数に置き換えるのに問題があり、それが私を夢中にさせています。 次のようなモジュールbar.pyがあるとしましょう。 from a_package.baz import do_something_expensive def a_function(): print do_something_expensive() そして、私は次のような別のモジュールを持っています: from bar import a_function a_function() from a_package.baz import do_something_expensive do_something_expensive = lambda: 'Something really cheap.' a_function() import a_package.baz a_package.baz.do_something_expensive = lambda: 'Something really cheap.' a_function() 私は結果を得ると期待しています: Something expensive! Something really cheap. Something really cheap. しかし、代わりに私はこれを取得します: Something expensive! Something expensive! …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.