假设您要编写一个类,其中每个方法都应以特定语句print "hello world"
结尾(仅作为示例)。最简单的方法是在您编写的每个方法的末尾简单地编写此语句。
class Example(object):
def method1(self):
...
print "hello world"
def method2(self):
...
print "hello world"
...
但是当一位同事5年后延长课程并且从未听说过每个方法应该以该陈述结束时会发生什么?然后,仅仅手动编写每个方法末尾的语句是不够的。但是你怎么能实现这一点,即使对于后来添加的扩展类和方法也是如此?也许有装饰师?
答案 0 :(得分:2)
好吧,如果你真的想,你可以使用这样的东西,虽然我认为它有点hackish:
class Example(object):
def method1(self):
print 1
def method2(self):
print 2
def __getattribute__(self, name):
def f():
# todo: check if it's actually a function or not before calling
r = object.__getattribute__(self, name)()
print 'hello world'
return r
return f
但我同意那些已经对您的问题发表评论的人:您是否在尝试解决的实际问题?
另外,我认为这隐藏了每个方法结束时发生的事情,并且可能会掩盖代码。记住:明确比隐含更好。
当然你可以把它放到一个类装饰器中:
def SaysHelloAfterEveryMethod(klass):
def __getattribute__(self, name):
def f():
# todo: check if it's actually a function or not
r = object.__getattribute__(self, name)()
print 'hello world'
return r
return f
klass.__getattribute__ = __getattribute__
return klass
@SaysHelloAfterEveryMethod
class Example(object):
def method1(self):
print 1
def method2(self):
print 2