Classe Punt2D¶
Disseny de la classe¶
Dissenyeu la classe
Punt2Dque permet de representar punts de l’espai 2D i deseu-la al fitxerpunt2D.py. L’especificació de la classePunt2Dés la següent:- class punt2D.Punt2D(x=0, y=0)¶
Atributs:
- x¶
Coordenada x del punt (enter)
- y¶
Coordenada y del punt (enter)
Mètodes:
- dist(p)¶
Retorna la distància entre la instància i el punt p.
La classe suporta a més la funció
strque retorna un string de format “Punt2D(coordx, coordy)”.Vegeu els exemples:
>>> from punt2D import Punt2D >>> t = Punt2D(1, 34) >>> str(t) 'Punt2D(1, 34)' >>> print(t) Punt2D(1, 34) >>> t = Punt2D(0, 0) >>> q = Punt2D(1, 1) >>> print('{:2.1f}'.format(t.dist(q))) 1.4
Per implementar aquesta classe, haureu de crear el mètode
Punt2D.__init__()que inicialitza els atributs del punt, el mètodePunt2D.dist()i també el mètodePunt2D.__str__()per tal donar suport a la funcióstr.En un shell de python, creeu una instància de la classe
Punt2D. Consulteu i modifiqueu els seus atributs. Feu-ne un print. Vegeu com s’ha invocat el mètodePunt2D.__str__(). Creeu una segona instància a la classePunt2Di comproveu el valor de la seva distància a la primera instància. Comproveu que el valor dep.dist(q)és el mateix queq.dist(p).
Nota
Disposeu de jocs de proves al fitxer
punt2D_1.txt
Utilització de la classe¶
En el mòdul
punts_pla.pydissenyeu la funcióllista_punts2D()que a partir d’una llista de tuples, on cada tupla representa un punt amb les seves coordenades (x, y), retorna la llista d’instàncies a la classePunt2D.Un polígon es representa com una llista de punts ordenats topològicament de tal forma que entre dos punts consecutius d’una llista hi ha una aresta i que la darrera aresta és la que uneix el darrer punt amb el primer. En el mòdul
punts_pla.pydissenyeu la funcióperímetre_polígon()que donada una llista d’instàncies a la classePunt2Dretorna el perímetre del polígon corresponent.
Nota
Disposeu de jocs de proves al fitxer
punts_pla.txt.
Sobrecàrrega i còpia¶
En el shell de python, proveu de fer el següent experiment:
>>> p = Punt2D(6, 7) >>> q = p >>> p.x = 4
Quin és el valor de q?
Afegiu a la classe
Punt2Del mètodecopia()que retorna una còpia del punt (no un àlies) utilitzant la funciócopy()del mòdulcopy.Afegiu a la classe
Punt2Del mètode__eq__(self, p)que retornaTruesi les dues coordenades dels dos punts tenen el mateix valor i retornaFalsealtrament. Per exemple:>>> p = Punt2D(1, 1) >>> q = p >>> p == q True >>> q = Punt2D(1, 1) >>> p == q True >>> q = Punt2D(2, 1) >>> p == q False
Nota
Disposeu de jocs de proves al fitxer
punt2D_2.txt
Herència¶
En el mòdul
punt2D_plusdissenyeu la classePunt2D_plusque es deriva de la classePunt2Dperò li afegeix dos atributs, el diàmetre de la circumferència amb la que es representa gràficament el punt i el seu color.- class punt2D.Punt2D_plus(x, y, color, diàmetre)¶
Té els atributs de la classe base i, a més:
- col¶
Color del punt (una tupla (r, g, b))
- diam¶
Diàmetre de la circumferència que representa gràficament el punt (float)
Proveu de crear una instància a la classe
Punt2D_plus. Intenteu utilitzar el mètodedist()amb aquesta instància. Ho podeu fer? Per què?
Nota
Disposeu de jocs de proves al fitxer
punt2D_plus.txt
Nota
Disposeu de solucions als fitxers
punt2D.py,
punts_pla.py
i punt2D_plus.py