models.pokemon_builder
Módulo pokemon_builder.py
[PT-BR] Implementa o padrão de projeto Builder para facilitar a construção
de objetos Pokemon
de forma incremental e segura.
[EN] Implements the Builder design pattern to simplify the incremental and safe
construction of Pokemon
objects.
Uso / Usage: builder = PokemonBuilder() pokemon = ( builder.number("025") .name("Pikachu") .add_type("Electric") .image("https://.../pikachu.png") .add_attribute("Altura", "0.4m") .build() )
1""" 2Módulo pokemon_builder.py 3=========================== 4 5[PT-BR] Implementa o padrão de projeto Builder para facilitar a construção 6de objetos ``Pokemon`` de forma incremental e segura. 7 8[EN] Implements the Builder design pattern to simplify the incremental and safe 9construction of ``Pokemon`` objects. 10 11Uso / Usage: 12 builder = PokemonBuilder() 13 pokemon = ( 14 builder.number("025") 15 .name("Pikachu") 16 .add_type("Electric") 17 .image("https://.../pikachu.png") 18 .add_attribute("Altura", "0.4m") 19 .build() 20 ) 21""" 22from typing import TypeVar 23Self = TypeVar("Self", bound="PokemonBuilder") 24from models.pokemon import Pokemon 25 26class PokemonBuilder: 27 """ 28 [PT-BR] Builder para criar objetos Pokemon de forma segura e incremental. 29 [EN] Builder to create Pokemon objects safely and incrementally. 30 """ 31 32 def __init__(self) -> None: 33 self.reset() 34 35 def reset(self) -> None: 36 self._attrs: dict[str, object] = { 37 "types": [], 38 "extra_attributes": {} 39 } 40 41 def number(self, n: str) -> Self: 42 self._attrs["number"] = n 43 return self 44 45 def name(self, n: str) -> Self: 46 self._attrs["name"] = n 47 return self 48 49 def add_type(self, t: str) -> Self: 50 self._attrs["types"].append(t) 51 return self 52 53 def image(self, url: str) -> Self: 54 self._attrs["image"] = url 55 return self 56 57 def add_attribute(self, key: str, value: str) -> Self: 58 self._attrs["extra_attributes"][key] = value 59 return self 60 61 def build(self) -> Pokemon: 62 if "number" not in self._attrs or "name" not in self._attrs: 63 raise ValueError("Pokemon must have at least a number and a name.") 64 65 pokemon = Pokemon( 66 number=self._attrs["number"], 67 name=self._attrs["name"], 68 types=self._attrs["types"], 69 image=self._attrs.get("image"), 70 extra_attributes=self._attrs["extra_attributes"] 71 ) 72 73 self.reset() 74 return pokemon
class
PokemonBuilder:
27class PokemonBuilder: 28 """ 29 [PT-BR] Builder para criar objetos Pokemon de forma segura e incremental. 30 [EN] Builder to create Pokemon objects safely and incrementally. 31 """ 32 33 def __init__(self) -> None: 34 self.reset() 35 36 def reset(self) -> None: 37 self._attrs: dict[str, object] = { 38 "types": [], 39 "extra_attributes": {} 40 } 41 42 def number(self, n: str) -> Self: 43 self._attrs["number"] = n 44 return self 45 46 def name(self, n: str) -> Self: 47 self._attrs["name"] = n 48 return self 49 50 def add_type(self, t: str) -> Self: 51 self._attrs["types"].append(t) 52 return self 53 54 def image(self, url: str) -> Self: 55 self._attrs["image"] = url 56 return self 57 58 def add_attribute(self, key: str, value: str) -> Self: 59 self._attrs["extra_attributes"][key] = value 60 return self 61 62 def build(self) -> Pokemon: 63 if "number" not in self._attrs or "name" not in self._attrs: 64 raise ValueError("Pokemon must have at least a number and a name.") 65 66 pokemon = Pokemon( 67 number=self._attrs["number"], 68 name=self._attrs["name"], 69 types=self._attrs["types"], 70 image=self._attrs.get("image"), 71 extra_attributes=self._attrs["extra_attributes"] 72 ) 73 74 self.reset() 75 return pokemon
[PT-BR] Builder para criar objetos Pokemon de forma segura e incremental. [EN] Builder to create Pokemon objects safely and incrementally.
62 def build(self) -> Pokemon: 63 if "number" not in self._attrs or "name" not in self._attrs: 64 raise ValueError("Pokemon must have at least a number and a name.") 65 66 pokemon = Pokemon( 67 number=self._attrs["number"], 68 name=self._attrs["name"], 69 types=self._attrs["types"], 70 image=self._attrs.get("image"), 71 extra_attributes=self._attrs["extra_attributes"] 72 ) 73 74 self.reset() 75 return pokemon