Índice
Na primeira parte de nosso tutorial conseguimos fazer nosso programa pegar um arquivo texto e gerar blocos com os parágrafos que ele continha, também conseguimos fazer com que ele tivesse a capacidade de exportar o que construímos em um arquivo externo.Segunda iteração
Como dissemos no início, precisamos fazer o programa mais modular e para conseguir isso, devemos realizar nosso código orientado a objetos.
Para isso devemos fazer as abstrações necessárias para que possamos construir classes que contenham os métodos que atendam aos nossos objetivos.
Requisitos
Vamos fazer uma lista dos componentes que precisamos construir, com isso saberemos o que devemos ter para que nosso programa seja mais completo:
- UMA analisador, este objeto nos permitirá ler o texto e lidar com as outras classes.
- Regras, Faremos uma regra para cada tipo de bloco, isso nos permitirá detectar que tipo de bloco temos e que formato devemos aplicar a ele.
- Filtros, com eles incorporaremos expressões regulares para poder tratar alguns elementos internos.
- Manipuladores, esses manipuladores serão usados pelo analisador para gerar a saída processada. Cada manipulador ele será capaz de lidar com um tipo diferente de etiquetas.
Essa classe nos permitirá lidar com certos tipos de rótulos para as saídas, vamos ver o código que ela pode conter:
Então, devemos construir uma super classe Manipuladores, que nos permitirá gerenciar os diferentes manipuladores que precisamos. Para isso, veremos o seguinte código:
class Handler: def callback (self, prefix, name, * args): method = getattr (self, prefix + name, None) se chamável (método): return method (* args) def start (self, name): self. callback ('start_', name) def end (self, name): self.callback ('end_', name) def sub (self, name): def substituição (match): result = self.callback ('sub_', nome, correspondência) default = match.group (0) resultado de retorno ou substituição de retorno padrão
Se fizermos agora um pequeno exercício, podemos ver nosso progresso até agora:
>>> dos manipuladores import HTMLRenderer >>> handler = HTMLRenderer () >>> import re >>> re.sub (r '\ * (. +?) \ *', handler.sub ('ênfase'), ' Isto * é * um teste ')' Isto é uma prova'
Como vemos na chamada anterior, primeiro importamos nossa classe HTMLRenderer o que é nosso manipulador, então nós importamos ré com o qual vamos lidar com as expressões regulares, então vamos para re.sub a expressão e o método com o qual deve ser aplicada, depois o texto e, por fim, vemos que a saída gerou o código HTML necessário.
Regras
Assim que tivermos os manipuladores, é hora de fazer as regras, elas nos ajudarão a dar um destino aos diferentes blocos, porém, deve ser orientado a objetos para que não fiquemos com um grande número de blocos aninhado se para validar todos os casos.
Devemos também ter uma superclasse que gerencie nossas regras, vamos ver o seguinte código que contém a superclasse.
classe Regra: def ação (self, block, handler): handler.start (self.type) handler.feed (bloquear) handler.end (self.type) return True
Como vemos o método açao () recebe o bloco e o tipo de manipulador que deve utilizar, com isso poderá distinguir por parâmetros qual bloco deve aplicar ao que está recebendo e assim finalizar o código que deve ser impresso.
Com isso finalizamos o tutorial e deixamos para todos continuarem até que tenhamos o projeto pronto sob as orientações dadas no início da primeira parte deste tutorial.Gostou e ajudou este tutorial?Você pode recompensar o autor pressionando este botão para dar a ele um ponto positivo