【发布时间】:2015-06-18 04:30:00
【问题描述】:
不要试图冗长地解释,这段代码sn-p应该这样做。
def decorator(function):
return lambda self: function(self) + 1
# imported from library
class A(object):
# override
def method_1(self):
pass
# override
def method_2(self):
pass
class B(A):
def method_1(self):
return 1
class C(B):
@decorator
def method_2(self):
return 1
class D(B):
@decorator
def method_2(self):
return 2
print C().method_1() # 1
print C().method_2() # 2
print D().method_2() # 3
这很好用,但由于decorator 只在method_2 上使用,也许应该拉进去。
class B(A):
def method_1(self):
return 1
@staticmethod
def decorator(function):
return lambda self: function(self) + 1
class C(B):
@B.decorator
def method_2(self):
return 1
这可行,但我不清楚这是否真的更好。尤其是 Python 是否将B.decorator 视为恰好在B 上定义的外部 函数,或者如果C 继承自B 会更有效。
我真正想要的是在B 上定义装饰器并像这样在C 上使用它。
class C(B):
@self.decorator
def method_2(self):
return 1
这不起作用。也许有更好的选择吗?谢谢。
【问题讨论】:
-
我看不出有什么特别的理由将装饰器移到课堂上。在 Python 的类之外有辅助的东西是完全正常的。
标签: python python-2.7 python-decorators