如何定义“静态”类来读取 Flask 应用程序中的反馈消息?
Posted
技术标签:
【中文标题】如何定义“静态”类来读取 Flask 应用程序中的反馈消息?【英文标题】:How to define "static" class to read feedback messages in Flask application? 【发布时间】:2022-01-19 10:02:12 【问题描述】:我们正在实现一个 Flask 应用程序。 我们将有用于反馈消息的 json 文件 - 带有键 - 值对(键将是一些常量,值将是实际消息,然后在运行时将读取并显示实际消息。 我想定义一个类,它在应用程序开始时读取 json 文件,以及一个方法,它根据键返回实际消息。 我实现了以下内容:
import json
class FeedbackMessagesReader:
@staticmethod
def read_feedback_config():
with open ("feedback_messages_json") as file:
return json.load(file)
@staticmethod
def get_feedback_message(key : str) -> str:
return config[key]
from feedback_messages_reader import FeedbackMessagesReader
config = FeedbackMessagesReader.read_feedback_config()
在 feedback_messages_reader.py 中,但我不知道这是否正确以及在多大程度上是正确的,并且是最好的方法。 我也在类的末尾定义了“配置”,因为如果我把它放在开头(像这样)
import json
from feedback_messages_reader import FeedbackMessagesReader
config = FeedbackMessagesReader.read_feedback_config()
class FeedbackMessagesReader:
@staticmethod
def read_feedback_config():
with open ("feedback_messages_json") as file:
return json.load(file)
@staticmethod
def get_feedback_message(key : str) -> str:
return config[key]
我收到错误“类已定义第 3 行”
所以我想获得建议,这是实现这一点的最佳方法?
【问题讨论】:
【参考方案1】:为什么您希望这些方法是静态的?我不明白。顺便说一句,“config”是烧瓶中的保留字,也许这就是你的问题。对于这个特定问题,更好的解决方案可能是使用常规方法,然后从中实例化一个对象。像下面这样:
import json
class FeedbackMessagesReader:
feedbacks = None
def __init__(self):
self.read_feedback_config()
def read_feedback_config(self):
with open ("feedback.json") as file:
self.feedbacks = json.load(file)
def get_feedback_message(self, key : str) -> str:
return self.feedbacks[key]
feeds = FeedbackMessagesReader()
print(feeds.get_feedback_message("name"))
对于以下feedback.json:
"name": "John Doe",
"age": 120
输出是John Doe
【讨论】:
尊敬的 Mohsen,非常感谢您的反馈。我将在很多类中使用 get_feedback_message() 方法。这就是为什么如果我在每个类中放入这种代码:feeds = FeedbackMessagesReader() print(feeds.get_feedback_message("name")) 每次读取“feedback.json”文件时。而且我不想这样做 - 我希望文件只被读取一次并将其放入静态类变量中。此外,我将变量的名称从“config”更改为其他名称,问题仍然存在。 @Ivajlo Iliev 假设您在应用程序或应用程序工厂中实例化feeds = FeedbackMessagesReader()
。然后你可以在你的其他文件和类中调用它,比如from app import feeds
以上是关于如何定义“静态”类来读取 Flask 应用程序中的反馈消息?的主要内容,如果未能解决你的问题,请参考以下文章