什么是装饰者用于?
可能重复:
了解Python装饰器
许多文档在线关注装饰器的语法。 但我想知道装饰者在哪里以及如何使用? 修饰器是否仅用于在装饰函数之前和之后执行额外的代码? 或者也许还有其他用法?
装饰器语法很强大:
@decorator
def foo(...):
...
相当于
def foo(...):
...
foo = decorator(foo)
这意味着装饰器基本上可以做任何事情 - 它们不必与装饰函数有任何关系! 例子包括:
functools.lru_cache
) property
) staticmethod
方法) 一个很好的实例是来自Python自己的unittest框架,它使用装饰器来跳过测试和预期的失败:
跳过测试只是使用skip()装饰器或其一个条件变体的问题。
基本跳过看起来像这样:
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
装饰器包装一个方法甚至整个类,并提供操作方法的能力,例如方法的调用。 我经常使用@Singleton装饰器来创建一个单例。
装饰者是非常强大和非常酷的概念。
看这本书了解它们:http://amzn.com/B006ZHJSIM
链接地址: http://www.djcxy.com/p/23809.html