A aquesta matèria hi ha un RA "Utilitza correctament tipus de dades simples
i compostes". Altres anys jo ensenyava tipus de dades compost homogènies
(vectors, matrius, ...) i també heterogènies (structs a C). Com a exemple
d'heterogènia, per explicar-me una mica, crear variables d'un tipus de
dades Alumne, formades per nom (string), nota (real) i data de naixement,
on la data de naixement està formada alhora per dia, mes i any (enters).
record/struct són sistemes de baix nivell, simples estructures de dades,
per agrupar variables de forma contigua en memòria. Si realment vols
explicar això amb Python et cal __slots__:
https://stackoverflow.com/questions/472000/usage-of-slots
Però quan he volgut ensenyar a Python com podem treballar amb variables
compostes heterogènies i com crear nous tipus de dades. he vist diverses
solucions i no sé si el que finalment he escollit és el més correcte i
pedagògic.
Primer vaig veure els diccionaris, que és una solució molt senzilla, però
no permet crear nous tipus de dades, i no "escala" bé quan hem de crear
estructures compostes molt complexes. Per exemple:
persona1 = {'nombre':'Calico', 'edad':25}
Segon vaig probar la versió nova dels NamedTuples, però és inmutable. Un
cop es dona un valor a un camp, ja no es pot modificar. Per exemple:
class Persona(NamedTuple):
nombre: str
edad: int
Tercer vaig descobrir el nou decorador DataClass, que es molt bonic i
semblava perfecte pel que volia:
@dataclass
class Persona:
nombre: float
edad: int
Però vaig pensar que a llarg termini els seria molt més útil que els
ensenyes a declarar estructures utilitzant classes, tot i que era més
complexe que l'anterior solució amb DataClass:
class Persona:
def __init__(self, nombre, edad):
self.nombre = nombre
self.edad = edad
def __str__(self):
return 'Persona: ' + self.nombre + ' - ' + str(self.edad) + ' años'
Però com que no veuen funcions fins la UF2, finalment vaig decidir
quedar-me amb classes que només tinguessin el constructor, i a més sense
paràmetres, i esperar a la següent UF que toca explicar funcions per
introduir els mètodes. Per exemple, vaig acabar amb això, que és més
senzill:
class Persona:
def __init__(self):
self.nombre = ''
self.edad = 0
Algú més s'ha trobat amb aquesta disjuntiva? Quina opció heu escollit? Hi
ha més opcions?
Salutacions
Àlex