【发布时间】:2018-12-11 20:20:41
【问题描述】:
为什么这种装饰器策略被认为不好? (..还是它!?)
class User(object):
def __init__(self):
self.thing = 5
def __atomic_rate_change(fn):
def wrapper(self,*args,**kwargs):
print "start magic"
self.thing += 1
fn(self,*args,**kwargs)
print "end magic"
return wrapper
@__atomic_rate_change
def foo(self,add):
print self.__atomic_rate_change # <bound method User.__atomic_rate_change of <__main__.User object at 0x6ffffe1ef50>>
self.thing += add
print "normal call {0}".format(self.thing)
test = User()
test.foo(1)
这行得通。但是,根据下面的资源,这是不好的做法。原因是:
[...] 这种方法存在重大缺陷:atomic_rating_change 变成了 User 类的实例方法。这没有任何意义。更多的 除此之外,它甚至不能作为方法工作:如果你调用它, 装饰参数将用作 self。
https://medium.com/@vadimpushtaev/decorator-inside-python-class-1e74d23107f6
我不明白为什么 atomic_rate_change 是一个实例方法是一个问题/错误/坏事。我只打算在课堂上使用装饰器。也许在这种情况下没关系?
【问题讨论】:
标签: python python-2.7 python-decorators