欢迎访问宙启技术站
智能推送

使用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并实现抽象方法,我们可以轻松地创建其他格式化类来生成不同形式的数据报告。这种抽象的设计使生成和格式化数据报告变得灵活和可扩展。