Les classe Avio i derivades

La classe Avio

La classe Avio, especificada a continuació, està implementada al fitxer avio.py. Representa avions amb un cert nombre de files i sis seients per fila (lletres 'A' a 'F'). Cada seient està identificat pel seu número de fila (un enter entre 0 i el nombre de files totals de l’avió -1) i una lletra entre 'A' i 'F'.

class avio.Avio(identificador, nf)

Atributs

id

Identificador de l’avió (str)

Aquesta classe suporta les operacions següents:

Operació

Resultat

a[ifil, icol]

Retorna el nom de la persona que ocupa el seient de la fila ifil i columna icol de a, amb \(0 \leq ifil \lt len(a)\) i \('A' \leq icol \leq 'F'\). Retorna 'Lliure' si ningú ocupa el seient

a[ifil, icol] = nom

Assigna nom al seient de la fila ifil i columna icol de a, amb \(0 \leq ifil \lt len(a)\) i \('A'\leq icol \leq 'F'\)

Aquesta classe suporta la funció len() que retorna el nombre de files de l’avió.

Proveu d’utilitzar aquesta classe. Disposeu de doctests per a inspirar-vos a tests-avio.txt. Mireu la implementació i observeu que la classe té un atribut privat per emmagatzemar els seients que és una llista de diccionaris. Vegeu com els mètodes __setitem__() i __getitem__() tenen un sol paràmetre per indicar la posició del seient, però aquest és una tupla formada per un int i un str.

Classe AvioRes

En el fitxer aviores.py, implementeu una nova classe, anomenada AvioRes que hereta de la classe avio.Avio i li afegeix un nou mètode.

class aviores.AvioRes(identificador, nfil)

Hereta de la classe avio.Avio i té el mètode addicional següent:

Mètodes

seients_lliures()

Retorna el nombre de seients lliures de l’avió

Disposeu de tests a tests-aviores.txt.

Classe AvioCat

En el fitxer aviocat.py, implementeu la classe AvioCat que hereta de la classe aviores.AvioRes i que representa avions amb dues categories de seients: els de primera i els de segona. Els seients de primera sempre ocupen les primeres files de l’avió i els de segona, les files següents. La classe AvioCat ha de tenir un nou atribut nfilprim que indica el nombre de files de primera categoria. Vegeu-ne l’especificació:

class aviocat.AvioCat(identificador, nfil, nfilprimera)

Hereta de la classe aviores.AvioRes i té un atribut i un mètode addicional i una nova implementació del mètode seients_lliures().

Atributs

nfilprim

Nombre de files reservades per a primera categoria (int). S’inicialitza amb el valor del paràmetre nfilprimera.

Mètodes

seients_categoria(cat)

Retorna el nombre de seients de la categoria cat (el valor de cat és 1 per primera i 2 per segona).

seients_lliures()

Sobreescriu el mètode corresponent de la classe base per retornar una tupla formada pel nombre de seients lliures de primera i segona categoria.

Disposeu de tests a tests-aviocat.txt.

Classe AvioIter

En el fitxer avioiter.py, implementeu la classe AvioIter.

class avioiter.AvioIter(identificador, nfil)

Hereta de la classe avio.Avio i suporta la funció iter() que permet iterar sobre els noms de les persones que ocupen el seus seients, en ordre fila i columna.

Disposeu de tests a tests-avioiter.txt.

Disposeu de solucions a aviores.py, aviocat.py i avioiter.py.