我有几个类似的python cherrypy应用程序
application_one.py
import cherrypy
class Class(object):
@cherrypy.tools.jinja(a='a', b='b')
@cherrypy.expose
def index(self):
return {
'c': 'c'
}
application_two.py
import cherrypy
class Class(object):
@cherrypy.tools.jinja(a='a2', b='b2')
@cherrypy.expose
def index(self):
return {
'c': 'c2'
}
...
application_n.py
import cherrypy
class Class(object):
@cherrypy.tools.jinja(a='aN', b='bN')
@cherrypy.expose
def index(self):
return {
'c': 'cN'
}
我想创建父类并在所有应用程序中派生它。 像这样的东西
parent.py
import cherrypy
class ParentClass(object):
_a = None
_b = None
_c = None
@cherrypy.tools.jinja(a=self._a, b=self._b)
@cherrypy.expose
def index(self):
return {
'c': self._c
}
application_one.py
import parent
class Class(ParentClass):
_a = 'a'
_b = 'b'
_c = 'c'
application_two.py
import parent
class Class(ParentClass):
_a = 'a2'
_b = 'b2'
_c = 'c2'
如何从派生类发送索引方法装饰器的参数?
现在我收到错误
NameError:name' self'未定义
答案 0 :(得分:2)
当您定义类时,将应用装饰器。定义类时,您没有运行方法,因此未定义self
。 self
没有引用的实例。
您必须使用元类,在构建子类时添加装饰器,或者您必须使用类装饰器,在类定义后应用右装饰器。
类装饰器可以是:
def add_decorated_index(cls):
@cherrypy.tools.jinja(a=cls._a, b=cls._b)
@cherrypy.expose
def index(self):
return {
'c': self._c
}
cls.index = index
return cls
然后将其应用于子类:
import parent
@parent.add_decorated_index
class Class(parent.ParentClass):
_a = 'a'
_b = 'b'
_c = 'c'