2013-07-05 48 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)''試試這個,讓我知道如果這對你有用。 –

相關問題