无法使用python中其他文件中定义的装饰器

时间:2017-03-14 11:07:06

标签: python python-decorators

我正在尝试使用装饰器来打印我的日志。为此,我在一个名为custom_logger.py的文件中定义了decorator:

import logging

class Logger(object):
   def __init__(self,decoratee_enclosing_class):
        self.decoratee_enclosing_class = decoratee_enclosing_class
   def __call__(self, aFunc):
      """Trace entry, exit and exceptions."""
      def loggedFunc( *args, **kw ):
         print "enter", aFunc.__name__
         try:
            result= aFunc( *args, **kw )
         except Exception, e:
            print "exception", aFunc.__name__, e
            raise
         print "exit", aFunc.__name__
         return result
         loggedFunc.__name__= aFunc.__name__
         loggedFunc.__doc__= aFunc.__doc__
         return loggedFunc

这是我的示例测试代码:

from custom_logger import Logger

class Test(object):
   @Logger('Test')
   def testP(self):
      print "hello"
a = Test()
a.testP()

我收到以下错误: Traceback(最近一次调用最后一次):   文件" test.py",第13行,in     a.testP() TypeError:' NoneType'对象不可调用

任何人都可以指出我错过了什么?

我已关注此reference的链接。

1 个答案:

答案 0 :(得分:3)

装饰器中有缩进错误。 __call__方法的最后三行应与def loggedFunc行的缩进位置相同。