2013-07-05 50 views
0

我有以下设置:将参数传递给框架实例化的类? (Python的瓶)

import sys 

from flask import Flask 
from flask.ext import restful 

from model import Model 

try: 
    gModel = Model(int(sys.argv[1])) 
except IndexError, pExc: 
    gModel = Model(100) 


def main(): 
    lApp = Flask(__name__) 
    lApi = restful.Api(lApp) 
    lApi.add_resource(FetchJob, '/') 
    lApp.run(debug=True) 


class FetchJob(restful.Resource): 
    def get(self): 
     lRange = gModel.getRange() 
     return lRange 


if __name__ == '__main__': 
    main() 

有没有一种方法来实例化的main()内的模型类 - 功能?在这里,Flask框架实例化FetchJob类,以便我不能在实例化过程中提供它转发的参数。

我不喜欢有全局变量,因为这打乱了整个设计...

+2

匈牙利命名法?请,只是没有...... – ThiefMaster

回答

2

我认为这应该工作,虽然我不熟悉的瓶:

import functools 

def main(): 
    try: 
     gModel = Model(int(sys.argv[1])) 
    except IndexError as pExc: 
     gModel = Model(100) 
    lApp = Flask(__name__) 
    lApi = restful.Api(lApp) 
    lApi.add_resource(functools.partial(FetchJob, gModel), '/') 
    lApp.run(debug=True) 


class FetchJob(restful.Resource): 

    def __init__(self, obj, *args, **kwargs): 
     restfult.Resource.__init__(self, *args, **kwargs) 
     self.obj = obj 

    def get(self): 
     lRange = self.obj.getRange() 
     return lRange 
+2

我会用'FetchJob'上的classmethod代替它。 'FetchJob.as_view()'返回一个可调用的。 – ThiefMaster

+0

对不起,functools版本不适合我。我得到一个AttributeError: ''functools.partial'对象没有属性'__name __' 这对应于Python文档:http://docs.python.org/2/library/functools.html#partial -objects。据此,部分对象与“正常”对象的行为不同。 – dubbaluga

+0

如果您正在查看我的帖子的编辑历史记录,还有一个'lambda版本' - 一切都一样,但是这一行是changning:'lApi.add_resource(lambda * args,** kwargs:FetchJob(gModel ,* args,** kwargs)''试试这个,让我知道如果这对你有用。 –

相关问题