gpt4 book ai didi

python - 如何通过继承在两个不同的类中拆分函数?初学者

转载 作者:太空宇宙 更新时间:2023-11-04 07:26:28 25 4
gpt4 key购买 nike

我有一个如下所示的 json。我下面也有程序。需要把程序分成两个类。先在first class获取请求,然后在second class进行操作。基本上如何将我的函数转换为 两个 单独的类,其中 on 类是通用的,其他类执行操作

Postman 接受 json POST 请求如下 http://127.0.0.1:5000/out

{
"filters": [{
"id": 1,
"name": "pool",
"type": "str",
"date": ["2019-12-01", "2019-12-03"]
}]
}

Flask 代码如下

from flask import Flask
app = Flask(__name__)
@app.route('/out/', methods=[ 'POST'])
def values_extract():
json_request = request.get_json()
start_date = ''
end_date = ''
data = json.loads(json.dumps(json_request))

#if valid json then do the below program in separate `**class**`

for i in data['filters']:
if i['type'] == 'pool':
start_date = i['date'][0]
end_date = i['date'][1]
return (start_date, end_date)

if __name__ == "__main__":
app.run()

我的 flask 可以完美运行上述功能

我的类伪代码

class jsonrequest():
def getrequest(self,json_request,data):
self.json_request = request.get_json()
self.data = json.loads(json.dumps(json_request))
start_date = ''
end_date = ''

class valuesextract(jsonrequest):
def filtervalues(self,json_request,data):
for i in data['filters']:
if i['type'] == 'pool':
start_date = i['date'][0]
end_date = i['date'][1]
return (start_date, end_date)

最佳答案

在进入解决方案之前。您需要问自己为什么需要上课?无需为您的用例保留状态。即使你使用类,到处都是@staticmethod

一个直接的重构想法是分离数据 ser/deser 逻辑和业务逻辑。针对您的情况

import json

from flask import Flask, request

app = Flask(__name__)


def select_dates(data):
start_date = ''
end_date = ''
for i in data['filters']:
if i['type'] == 'pool':
start_date = i['date'][0]
end_date = i['date'][1]
return [start_date, end_date]


@app.route('/out', methods=['POST'])
def values_extract():
data = request.json
# if valid json then do the below program in separate `**class**`
return json.dumps(select_dates(data))


if __name__ == "__main__":
app.run()

还删除了不必要的 json 加载/转储调用。

HTTP 天生就是无状态的,您会发现很少有需要类的用例。尽可能多地使用函数。

关于python - 如何通过继承在两个不同的类中拆分函数?初学者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59197086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com