基于模式的类的装饰方法

时间:2018-10-24 10:19:31

标签: python python-2.7

嗨,我是一个像这样的班级:

def Foo:
   def calc(self):
      print "calc"

   def on_get(self):  
      print "on get"

   def on_post(self):  
      print "on post"

我想在以on_开头的类的任何方法中注入pdb跟踪器,因此我想到编写一个装饰器来做到这一点。这就是我到目前为止所拥有的。

def debuggable(cls):
   from types import FunctionType

   def pdb_injector(view):
       def injector_wrapper():
           import pdb; pdb.set_trace()
           view()
       return injector_wrapper

   class wrapped(cls):
       views = [x for x,y in cls.__dict__.items() if type(y) == FunctionType and 'on_' in x]
       for view in views:
           _view = getattr(cls,view)
           _view = pdb_injector(_view)
           setattr(cls ,view, _view)
   return wrapped

在将Foo.on_get()添加到@debuggable类之后,我确实打电话给Foo时。我收到此错误:

  

TypeError:jector_wrapper()不接受任何参数(给定1个)。

为什么会出现此错误?

0 个答案:

没有答案