Python:对象在哪里实例化?在对象创建过程中如何传递参数?

Python:对象在哪里实例化?在对象创建过程中如何传递参数?,python,flask,flask-restplus,Python,Flask,Flask Restplus,我正在使用Python Flask和Flask restplus构建一个RESTful API 这是一个restplus应用程序,我按照这里给出的页面()来设计我的应用程序 我想在对象安装期间将参数传递给Ratings类。Ratings类使用flask restplus提供的命名空间装饰器进行装饰 我无法理解Ratings对象在哪里被设置,以便我可以将参数传递给该对象。我必须传递的参数是app.py文件中Ratings类的文件名(settings.json) 任何帮助都将不胜感激 我的目录结构如

我正在使用Python Flask和Flask restplus构建一个RESTful API

这是一个restplus应用程序,我按照这里给出的页面()来设计我的应用程序

我想在对象安装期间将参数传递给Ratings类。Ratings类使用flask restplus提供的命名空间装饰器进行装饰

我无法理解Ratings对象在哪里被设置,以便我可以将参数传递给该对象。我必须传递的参数是app.py文件中Ratings类的文件名(settings.json)

任何帮助都将不胜感激

我的目录结构如下:

|_>apis
|      |_> __init__.py
|      |_> ratings.py
|_>app.py
这三个python文件如下所示:

#__init__.py

from flask_restplus import Api
from .ratings import api as ns1    

api = Api(version='1.0', title='Reviews Service',
          description='Hello Reviews',)

api.add_namespace(ns1)
# in your ratings.py
class Ratings(Resource):
    def __init__(self, *args, **kwargs):
        self.settings = self.kwargs.get('settings')
        # don't forget to call the super class
        super(Ratings, self).__init__(*args, **kwargs)

    def get(self, version, metric_name, app_store_name):

    # get the settings here
    db_interface = DBInterface(settings_file_path=self.settings)

# app.py
# Initialize like this
api.add_resource(ratings.Ratings, '/api/my/end/point/',
             resource_class_kwargs={'settings': "path_to_settings.json"})


#ratings.py
从db_接口导入DBInterface
从LASKU restplus导入资源,名称空间
api=名称空间('AppReviewRatings',description='“评级”相关操作',)
@api.route('/api//')
@doc(参数={'version':'“1”(v1)或“2”(v2),
‘指标名称’:‘评级’或‘评论’,
“应用商店名称”:“苹果”或“谷歌”})
班级评分(资源):
@api.响应(200,“成功”)
@api.响应(400,“验证错误”)
def get(自身、版本、度量值名称、应用商店名称):
#我必须从app.py文件接收settings.json作为参数。
db\u interface=DBInterface(settings\u file\u path='settings.json')
参数={'app_store_name':app_store_name,'hue_version':hue_version}
结果=db_接口.查询(q_类型=度量_名称,参数=参数)
返回结果

您可以在类中定义
\uuuu init\uuu
函数,如下所示:

#__init__.py

from flask_restplus import Api
from .ratings import api as ns1    

api = Api(version='1.0', title='Reviews Service',
          description='Hello Reviews',)

api.add_namespace(ns1)
# in your ratings.py
class Ratings(Resource):
    def __init__(self, *args, **kwargs):
        self.settings = self.kwargs.get('settings')
        # don't forget to call the super class
        super(Ratings, self).__init__(*args, **kwargs)

    def get(self, version, metric_name, app_store_name):

    # get the settings here
    db_interface = DBInterface(settings_file_path=self.settings)

# app.py
# Initialize like this
api.add_resource(ratings.Ratings, '/api/my/end/point/',
             resource_class_kwargs={'settings': "path_to_settings.json"})

您可以查看源代码。

您能使用名称空间找到解决方案吗?我尝试在init函数中加载Keras模型,以便它只加载一次,但每次我点击get或post方法时,它都会一次又一次地加载。你知道原因吗?