我有基类:
class BaseGameHandler(BaseRequestHandler):
name = 'Base'
def get(self):
self.render(self.name + ".html")
现在,我需要定义一些子类,但问题是,它们必须有一个装饰器。等效代码为:
@route('asteroid')
class AsteroidGameHandler(BaseGameHandler):
name = 'asteroid'
@route('blah')
class BlahGameHandler(BaseGameHandler):
name = 'blah'
也许还有更多。
这里有一点背景:这是一个tornado web应用程序,@route
装饰器允许您将/blah
映射到BlahGameHandler
。此代码将/blah
映射到BlahGameHandler
,将/asteroid
映射到AsteroidGameHandler
。你知道吗
所以我认为我应该在python中使用元编程并动态定义所有这些类。我尝试了以下不起作用的方法(我所说的不起作用是指最终的web应用在/asteroid
和/blah
上都抛出404):
game_names = ['asteroid', 'blah']
games = list([game, type('%sGameHandler' % (game.title()), (BaseGameHandler,), {'name': game})] for game in game_names)
for i in xrange(len(games)):
games[i][1] = route(games[i][0])(games[i][1])
我错过了什么?运行时这两个代码不是等价的吗?你知道吗
您使用的库只在模块中查找全局类对象。你知道吗
将每个类设置为全局类;^{} function 使您可以作为字典访问模块命名空间:
include()
代码不会在列表中查找视图。你知道吗具体来说,
include()
使用以下循环来检测处理程序:dir(module)
只考虑顶级对象。你知道吗相关问题 更多 >
编程相关推荐