【发布时间】:2017-02-17 06:29:22
【问题描述】:
我正在尝试在我的应用中实现一个简单的日志记录功能。
class messages(object):
# Implement decorator here
def on(self):
def wrapper():
# Do something here
return wrapper
def off(self):
def wrapper():
# Do something here
return wrapper
class website(object):
@messages.on #This line can be switched on/off
def login(self):
# Do a whole bunch of stuff here
self.response = "[+] Login Succeeded!"
website = website()
website.login() # prints self.response based on @messages.on/off
但我不确定我需要在我的装饰器中应用什么。我曾尝试创建实例并添加参数,但大多会收到 TypeError。我对装饰师相当陌生。任何帮助将不胜感激,我希望下次记住这一点。
【问题讨论】:
-
@Hussain:这在这里并不适用;他们在这里没有使用来自同一类主体的函数。
-
你的方法没有任何意义。一方面,
logger中的self指的是Utilities实例,而您没有 - 您的意思是它是@staticmethod吗?为什么它在一个类中(这不是 Java)?其次,将其绑定到.sound属性使其几乎无法重用。为什么不让bark总是返回'woof',然后让包装器在调用它包装的方法时打印它返回的任何东西?为什么打电话给Dog.bark时有print?最后,不要使用新实例Dog来影响类Dog;按照惯例,dog = Dog(). -
@MartijnPieters 我打算展示stackoverflow.com/a/1263782/1637867
-
@Hussain:是的,这不适用于这里。