1

假设您要编写一个类,其中每个方法都应以特定语句结尾print "hello world"(只是一个示例)。最简单的方法是在您正在编写的每个方法的末尾简单地编写此语句。

class Example(object):
  def method1(self):
    ...
    print "hello world"
  def method2(self):
    ...
    print "hello world"
  ...

但是,当一位同事在 5 年后扩展课程并且从未听说每种方法都应该以该语句结尾时会发生什么?那么在每个方法的末尾手动编写语句是不够的。但是,即使对于以后添加的扩展类和方法,你怎么能做到这一点呢?也许与装饰者?

4

1 回答 1

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
于 2013-09-03T11:41:31.120 回答