需要一些帮助来实现/理解装饰器作为一个类如何在 Python 中工作。我发现的大多数例子要么装饰一个类,但将其实现为一个函数,要么实现一个类,但装饰一个函数。我的目标是创建作为类实现的装饰器并装饰类。
更具体地说,我想创建一个@Logger装饰器并在我的一些类中使用它。这个装饰器要做的只是self.logger在类中注入一个属性,所以每次我用它装饰一个类时,@Logger我都可以self.logger.debug()在它的方法中插入一个属性。
一些初步问题:
__init__接收什么参数?我它只会收到装饰类和一些最终的装饰器参数,这实际上是大多数情况下发生的情况,但请查看下面的DOMElementFeatureExtractor. 为什么它会收到所有这些参数?__call__?它将收到什么?@Logger(x='y')) 提供参数?它会被传递给__init__方法吗?__call__?(我能让它发挥作用的唯一方法)@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)