2.|2. 报告结构规定

知识基础

  • Python类的基础了解
学习目标
  • 使用Python类构造文章结构
1. 文章建立
首先,我们先建立基础的文章组成构建:文档,章,节。
class Document(object): def __init__(self): # 文章标题 self.title = None # 子标题 self.subtitle = None # 前言 self.foreword = None # 章节 self.chapters = []class Chapter(Document): def __init__(self): super(Chapter, self).__init__() # 章节内表格 self.table = None # 章节内有多个图表时 self.tables = [] # 文本内容 self.content = None # 图片 self.image = None # 多个图片 self.images = []# 子章节定义可以直接使用Chapter定义,利用了Python类的继承,也为之后自定义子章节提供了留白 class Subchapter(Chapter): pass

2. 建立结构
document = Document()

以上我们对Document类做了基础的定义,下一步我们需要根据所要制作报告确定Document的结构,假如我们使用Example 1中的报告,报告由5个章节组成,其中最后一个总结的章节无标题,每个章节中有至多5个子章节,子章节中有单个图片和表格,章节中会有两个位置有文字
基于内容定制Chapter 以上我们对Document类做了基础的定义,下一步我们需要根据所要制作报告确定Document的结构,假如我们使用Example 1中的报告,报告由10个App的介绍组成,而每个App的内容都依次为:标题、Applogo、说明文字、说明图片、榜单变动,那么我们可以定制Chapter类的组成结构
class Chapter(Document): def __init__(self, subchapter_number=0): """ subchapter_number : 子章节数 """ super(Chapter, self).__init__() self.content1 = None self.table = None # 图表会先做出图片形式,此处保存图片的路径 self.image = None self.content2 = None self.rank_list_change = None self.subchapters= [Chapter(subchapter_number=0) for i in range(subchapter_number)]

为章节加入 添加图片的方法 使用self.image或者self.images保存的为图片路径,为了方便我们可以直接把matplotlib的fig直接加入chapter中,只需要设定加入规则
class Chapter(Document): def __init__(self, subchapter_number=0, number=''): """ subchapter_number : 子章节数 number : 章节编号,基于文档结构生成,需要是唯一的 """ super(Chapter, self).__init__() self.content1 = None self.table = None # 图表会先做出图片形式,此处保存图片的路径 self.image = None self.content2 = None self.rank_list_change = None self.number = number self.chapters= [Chapter(subchapter_number=0, number="{}_subchapter{}".format(self.number, i)) for i in range(subchapter_number)] # 设定图片保存的链接 self.image_path = './image/'def set_image(self, fig): image_filename = '{}{}.png'.format(self.image_path, self.number) fig.savefig(image_filename, dpi=160, bbox_inches='tight') self.image = image_filename

# 我们知道报告中有5个章节,每个章节至多有4个子章节 # 此处代码可以加入document的__init__函数中,在实例化过程中直接完成 document = Document() for i in range(5): document.chapters.append(Chapter(subchapter_number=4, number="chapter{}".format(i)))

print(document.chapters[3].chapters[0].number)

chapter3_subchapter0

添加函数直接打印document文档结构
def print_structure(chapter, deep): if chapter.chapters: for subchapter in chapter.chapters: print('--'*deep+subchapter.number) print_structure(subchapter, deep+1) else: return

## print_structure(document, 0)

【2.|2. 报告结构规定】把此文件中做的报告结构保存入./ExampleCode/models.py
并且把print_structure方法放入Document
from ExampleCode.models import Document

document = Document() document.print_structure(0)

chapter0 --chapter0_subchapter0 --chapter0_subchapter1 --chapter0_subchapter2 --chapter0_subchapter3 chapter1 --chapter1_subchapter0 --chapter1_subchapter1 --chapter1_subchapter2 --chapter1_subchapter3 chapter2 --chapter2_subchapter0 --chapter2_subchapter1 --chapter2_subchapter2 --chapter2_subchapter3 chapter3 --chapter3_subchapter0 --chapter3_subchapter1 --chapter3_subchapter2 --chapter3_subchapter3 chapter4 --chapter4_subchapter0 --chapter4_subchapter1 --chapter4_subchapter2 --chapter4_subchapter3

    推荐阅读