有人可以帮我处理我的案子吗?我有一个必须传递给 Class 的变量才能从这个 Class 设置 bool 。但是,就我而言,我可以这样做来设置 bool,但不能传递变量。在另一种情况下,我可以传递我的变量,但不能从这个类设置我的 bool。我使用 FastAPI 作为我的 API。
(1) 这是我的代码,可以传递一些变量但不能设置 bool:
@app.get("/predict")
def predict(
brand: str = Query(...),
):
e = MyModelPrediction()
e(brand)
result_data = {'brand': brand}
result = {
'data': result_data
}
return result
(2) 这是我的代码,不能传递一些变量但可以设置bool:
@app.get("/predict")
def predict(
brand: str = Query(...),
prediction=Depends(MyModelPrediction())
):
result_data = {'brand': brand}
result = {
'data': result_data
}
return result
所以,这是我的课程:
class MyModelPrediction(object):
model_loaded: bool = False
print(model_loaded)
def __call__(self, brand):
print("Brand :", brand)
if not self.model_loaded:
self._load_model()
time.sleep(1)
def _load_model(self):
print("Load model...")
time.sleep(5)
self.model_loaded = True
我想将 model_loaded
设置为 True
,但还要从函数 brand
传递变量 predict
。如果我使用方法(1),bool仍然是False
并且变量可以通过,但是如果我使用方法(2),bool可以是True
但变量没有通过。
答案 0 :(得分:0)
我无法测试,但我希望您在案例 2 中一遍又一遍地使用相同的默认对象。这是 Python 中相当常见的问题。
@app.get("/predict")
def predict(
brand: str = Query(...),
prediction=Depends(MyModelPrediction())
):
任何参数的默认值只在加载时计算一次,所以这与:
tmp1 = Query(...)
tmp2 = Depends(MyModelPrediction())
@app.get("/predict")
def predict(
brand: str = tmp1,
prediction = tmp2
):
这些在功能上是相同的,但在第二个版本中更明显的是,除非调用者明确提供了值,否则此函数的每次调用都将使用相同的默认对象。