通俗解释python装饰器,python中的装饰器的作用

  通俗解释python装饰器,python中的装饰器的作用

  原始地址

  https://www . code mentor . io/python/tutorial/advanced-use-python-decorators-class-function

  引言我写这篇文章的主要目的是介绍装修工的高级用法。如果你对装饰装置知之甚少,或者对本文提到的知识点感到困惑。建议你复习一下装饰师基础课程。

  本教程的目标是介绍装饰者的一些有趣的用法。尤其是如何在类中使用装饰器,以及如何向装饰器传递额外的参数。

  Decorator vs Decorator Pattern Decorator Pattern是一种面向对象的设计模式,它允许向现有对象动态添加行为。当你装饰一个对象时,在某种程度上,你是独立于同一个类的其他实例来扩展它的功能。

  Python decorator不是decorator模式的实现。它在定义函数和方法时添加函数,而不是在运行时添加。装饰设计模式本身可以用Python实现。因为Python是一种动态编程语言,所以没有必要这样做。

  这是一个最简单的装饰器例子。在继续阅读之前,请确保您理解此代码。如果你需要更多关于这段代码的解释,请阅读基础装饰教程。

  带参数的装饰者有时候带参数的装饰会非常有用。这种技术常用于函数注册。它通常用于web框架金字塔中,例如:

  例如,我们有一个GUI应用程序,用户可以在其中登录并与用户交互。并且用户界面和GUI界面之间的交互触发事件,导致Python函数的执行。假设使用图形界面的用户有很多,他们各自的权限级别差别很大,不同的功能需要不同的权限。例如,考虑以下函数:

  实现这些权限检查的一种方法是实现多个decorators,比如

  然而,这太可怕了。这需要大量的复制和粘贴。每个装饰者需要一个不同的名字。如果权限检查有任何变化,每个装饰器都需要修改。不是有一个装修工把上面三个装修工的活都做了吗?

  为了解决这个问题,我们需要一个返回装饰者的函数:

  尝试调用delete_user、new name和premium_checkpoint,看看会发生什么。

  Premium_checkpoint和delete_user生成“权限被拒绝”异常,new_game正常执行。

  以下是参数化装饰的一般形式和使用示例:

  相当于:

  类装饰器装饰器不仅可以装饰函数,还可以装饰类。例如,我们有一个包含许多重要方法的类,我们需要记录每个方法的执行时间。我们可以用上面的time_this来装饰这个类:

  这种方法可以正常运行。但是这个类中有很多冗余代码。如果我们想构建更多的类方法,却忘了修饰其中的一个,如果我们不想修饰这个类中的方法,会发生什么?可能有犯错的空间,如果这样写就更好了:

  相当于:

  那么time_all_class_methods是如何工作的呢?

  首先,我们需要将一个类作为参数,然后返回一个类。我们还需要知道返回的类的功能应该与原始类ImportantStuff的功能相同。也就是说,我们还是要做重要的事情,我们要记录每一步的时间。我们这样写:

  总之,在本教程中,我们向您展示了Python decorators的一些技巧——我们介绍了如何向decorator传递参数以及如何修饰类。但这只是冰山一角。除了本文所描述的,还有许多其他方式来使用装饰器。我们甚至可以用装裱器来装饰装裱器(如果你有机会用的话,可能是做全面检查的好方法)。Python有一些内置的decorators,比如staticmethod和classmethod。

  看完这篇文章还需要学习什么?通常,没有比我在文章中展示的装饰器更复杂的了。如果你有兴趣了解更多关于改变类函数的方法,我建议你阅读《继承和OOP设计原则》。或者你可以尝试阅读元类。

  涉及

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: