Usare il Builder Pattern in Python
Il pattern Builder è uno dei pattern "fondamentali", utilizzato in alternativa all'utilizzo dei costruttori in overloading.
L'obiettivo è quello di rimpiazzare costruttori poco leggibili e poco flessibili, con classi che siano pronte a creare oggetti più complessi.
Oggi ne vediamo un esempio in Python.
Partiamo dalla classe base:
class Anagrafica:
def __init__(self, ragsoc, breve, via, cap, localita, provincia, nazione, codifiscale):
self.ragsoc = ragsoc
self.breve = breve
self.via = via
self.cap = cap
self.localita = localita
self.provincia = provincia
self.nazione = nazione
self.codifiscale = codifiscale
In questo caso i parametri non tantissimi, ma neanche pochi; quindi già qui può avere un senso usare il pattern.
Vi metto qui sotto un esempio:
class Anagrafica:
def __init__(self, ragsoc, breve, via, cap, localita, provincia, nazione, codifiscale):
self.ragsoc = ragsoc
self.breve = breve
self.via = via
self.cap = cap
self.localita = localita
self.provincia = provincia
self.nazione = nazione
self.codifiscale = codifiscale
def __str__(self):
return f"Anagrafica di: {self.ragsoc} ({self.codifiscale}) - {self.via}, {self.localita}"
class AnagraficaBuilder:
def __init__(self):
self.ragsoc = None
self.breve = None
self.via = None
self.cap = None
self.localita = None
self.provincia = None
self.nazione = "Italia"
self.codifiscale = None
def set_ragione_sociale(self, ragsoc):
self.ragsoc = ragsoc
return self
def set_nome_breve(self, breve):
self.breve = breve
return self
def set_indirizzo(self, via, cap, localita, provincia, nazione="Italia"):
self.via = via
self.cap = cap
self.localita = localita
self.provincia = provincia
self.nazione = nazione
return self
def set_codice_fiscale(self, codifiscale):
self.codifiscale = codifiscale
return self
def build(self):
# ALTRE VALIDAZIONI
if not self.ragsoc or not self.codifiscale:
raise ValueError("Ragione Sociale e Codice Fiscale sono obbligatori!")
return Anagrafica(
self.ragsoc, self.breve, self.via, self.cap,
self.localita, self.provincia, self.nazione, self.codifiscale
)
builder = AnagraficaBuilder()
cliente = (builder
.set_ragione_sociale("Piping S.p.A.")
.set_codice_fiscale("12345678901")
.set_indirizzo("Via Roma 10", "10100", "Torino", "TO")
.build())
print(cliente)
Enjoy!
python builder
Commentami!