首页 > 解决方案 > 基于模式的类的装饰方法

问题描述

嗨,像这样的课程:

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

   def on_get(self):  
      print "on get"

   def on_post(self):  
      print "on post"

我想在以on_.

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我收到此错误:

类型错误:injector_wrapper() 不接受任何参数(给定 1)。

为什么我会收到此错误?

标签: pythonpython-2.7

解决方案


推荐阅读