0

重複の可能性:
Pythonデコレータを理解する

オンラインの多くのドキュメントは、デコレータの構文に関するものです。しかし、デコレータがどこでどのように使用されているのか知りたいですか?デコレータは、デコレートされた関数の前後に追加のコードを実行するためだけに使用されますか?または多分他の使用法がありますか?

4

3 に答える 3

3

デコレータ構文は強力です。

@decorator
def foo(...):
    ...

と同等です

def foo(...):
    ...
foo = decorator(foo)

つまり、デコレータは基本的に何でもできます。デコレートされた機能とは何の関係もありません。例は次のとおりです。

  • 再帰関数の記憶(functools.lru_cache
  • 関数へのすべての呼び出しをログに記録する
  • 記述子機能の実装(property
  • メソッドを静的としてマークする(staticmethod
于 2012-11-19T08:54:11.823 に答える
0

実用的な良い例は、デコレータを使用してテストと予想される失敗をスキップするPython 独自のunittest フレームワークからのものです。

テストをスキップするには、skip() デコレーターまたはその条件付きバリアントの 1 つを使用するだけです。

基本的なスキップは次のようになります。

class MyTestCase(unittest.TestCase):

    @unittest.skip("demonstrating skipping")
    def test_nothing(self):
        self.fail("shouldn't happen")

    @unittest.skipIf(mylib.__version__ < (1, 3),
                     "not supported in this library version")
    def test_format(self):
        # Tests that work for only a certain version of the library.
        pass

    @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
    def test_windows_support(self):
        # windows specific testing code
        pass
于 2012-11-19T09:29:50.647 に答える
0

デコレーターは、メソッドまたはクラス全体をラップし、メソッドの呼び出しなどを操作する機能を提供します。@Singleton デコレーターを使用してシングルトンを作成することがよくあります。

デコレータは非常に強力で、本当にクールなコンセプトです。

それらを理解するためにこの本を見てください:http://amzn.com/B006ZHJSIM

于 2012-11-19T09:30:12.413 に答える