使用AbstractFormatter()进行数据报告的生成和格式化
发布时间:2023-12-27 06:12:45
AbstractFormatter是一个抽象类,用于生成和格式化数据报告。它提供了许多方法和属性,用于定义报告的结构和样式。下面是一个使用AbstractFormatter生成和格式化数据报告的示例:
from abc import ABC, abstractmethod
class AbstractFormatter(ABC):
def __init__(self, data):
self.data = data
def generate_report(self):
report = self._generate_header()
report += self._format_data()
report += self._generate_footer()
return report
@abstractmethod
def _generate_header(self):
pass
@abstractmethod
def _format_data(self):
pass
@abstractmethod
def _generate_footer(self):
pass
class TextFormatter(AbstractFormatter):
def _generate_header(self):
return "Data Report
"
def _format_data(self):
formatted_data = ""
for key, value in self.data.items():
formatted_data += f"{key}: {value}
"
return formatted_data
def _generate_footer(self):
return "End of Report"
class HTMLFormatter(AbstractFormatter):
def _generate_header(self):
return "<html><head><title>Data Report</title></head><body>"
def _format_data(self):
formatted_data = "<table>"
for key, value in self.data.items():
formatted_data += f"<tr><td>{key}</td><td>{value}</td></tr>"
formatted_data += "</table>"
return formatted_data
def _generate_footer(self):
return "</body></html>"
data = {
"Name": "John Doe",
"Age": 30,
"Email": "johndoe@example.com"
}
text_formatter = TextFormatter(data)
text_report = text_formatter.generate_report()
print(text_report)
html_formatter = HTMLFormatter(data)
html_report = html_formatter.generate_report()
print(html_report)
在上面的示例中,我们定义了一个AbstractFormatter类,它是一个抽象类,包含了一个data属性和一个generate_report方法。生成报告的实际逻辑定义在_generate_header,_format_data和_generate_footer这三个抽象方法中。这些方法需要在子类中实现。
我们还定义了两个具体的格式化类TextFormatter和HTMLFormatter。它们分别实现了_generate_header,_format_data和_generate_footer方法,根据它们的格式要求生成文本或HTML格式的报告。
在我们的示例中,我们创建了一个包含姓名、年龄和电子邮件的数据字典。然后分别使用TextFormatter和HTMLFormatter来生成报告,并打印出来。
对于TextFormatter,报告将以文本格式生成:
Data Report Name: John Doe Age: 30 Email: johndoe@example.com End of Report
对于HTMLFormatter,报告将以HTML格式生成:
<html><head><title>Data Report</title></head><body> <table> <tr><td>Name</td><td>John Doe</td></tr> <tr><td>Age</td><td>30</td></tr> <tr><td>Email</td><td>johndoe@example.com</td></tr> </table> </body></html>
通过继承AbstractFormatter并实现抽象方法,我们可以轻松地创建其他格式化类来生成不同形式的数据报告。这种抽象的设计使生成和格式化数据报告变得灵活和可扩展。
