小编F. *_*nob的帖子

使用装饰器将 Python 类装饰为类

需要一些帮助来实现/理解装饰器作为一个类如何在 Python 中工作。我发现的大多数例子要么装饰一个类,但将其实现为一个函数,要么实现一个类,但装饰一个函数。我的目标是创建作为类实现的装饰器并装饰类。

更具体地说,我想创建一个@Logger装饰器并在我的一些类中使用它。这个装饰器要做的只是self.logger在类中注入一个属性,所以每次我用它装饰一个类时,@Logger我都可以self.logger.debug()在它的方法中插入一个属性。

一些初步问题:

  1. 装饰器__init__接收什么参数?我它只会收到装饰类和一些最终的装饰器参数,这实际上是大多数情况下发生的情况,但请查看下面的DOMElementFeatureExtractor. 为什么它会收到所有这些参数?
  2. 方法又如何呢__call__?它将收到什么?
  3. 如何为装饰器 ( @Logger(x='y')) 提供参数?它会被传递给__init__方法吗?
  4. 我真的应该在方法中返回类的实例吗__call__?(我能让它发挥作用的唯一方法)
  5. 链接装饰器怎么样?如果前一个装饰器已经返回了该类的实例,那将如何工作?为了能够做到这一点,我应该在下面的示例中修复什么@Logger @Counter MyClass:

请看一下这个示例代码。我创建了一些虚拟示例,但最终您可以看到我真实项目中的一些代码。

您可以在最后找到输出。

任何有助于理解作为类实现的 Python 类装饰器的帮助将不胜感激。

谢谢

from abc import ABC, abstractmethod

class ConsoleLogger:
  def __init__(self):
    pass
  
  def info(self, message):
    print(f'INFO {message}')

  def warning(self, message):
    print(f'WARNING {message}')
   
  def error(self, message):
    print(f'ERROR {message}')

  def debug(self, message):
    print(f'DEBUG {message}')

class Logger(object):
    """ Logger decorator, adds a …
Run Code Online (Sandbox Code Playgroud)

python decorator python-decorators

2
推荐指数
1
解决办法
2836
查看次数

标签 统计

decorator ×1

python ×1

python-decorators ×1