, , , , , , ,

Classes i objectes en Python

Python permet organitzar els programes a partir d'objectes.

Per a definir els objectes s'utilitzen les «classes» que serien com «plantilles» per a aquests.

Classe: Recull de característiques que són: conjunt d'atributs (de classe, d'instància) i conjunt de mètodes (pot incloure un mètode «constructor»).

Objecte: Instància sobre una classe (objecte creat -materialitzat- a partir d'una classe).

Paraules clau i elements destacables en el món de les classes en Python:

Exemple amb explicacions: classe i objectes

# a Python tot són objectes (fins i tot les variables)
 
# classe sense constructor ni atributs ni mètodes
class A():  # en la declaració de la classe podem ometre els ()
    pass
 
 
objecteA = A()
print(type(objecteA))  # <class '__main__.A'>
 
 
# classe amb atributs de classe
# als atributs de classe s'hi pot accedir per mitjà de la classe (sense necessitat d'instància d'objecte)
class B():
    b1 = 10
    b2 = 30
 
 
objecteB = B()
print(objecteB.b1 + objecteB.b2)  # 40
 
 
# classe amb mètodes (les funcions dins una classe s'anomenen mètodes)
class C():
    def metodeC(self):  # self representa a cada objecte:
        print("salutacions des de metodeC")
 
 
objecteC = C()
objecteC.metodeC()
 
 
# classe amb atributs de classe i mètodes
class D():
    d = "SALUTACIONS DES D'ATRIBUT d"  # atributs de classe: compartits per tots els objectes
 
    def metodeD(self):
        print("salutacions des de metodeD i " + self.d)
 
 
objecteD = D()
objecteD.metodeD()  # salutacions des de metodeD i SALUTACIONS DES D'ATRIBUT d
objecteD.d = ""
objecteD.metodeD()  # salutacions desde metodeD i
# podem establir el valor d'un atribut de classe per a totes les instàncies que s'aniran
# creant assignant per mitjà de la classe (com si fos membre abstracte)
D.d = "NOU VALOR PER A TOTS ELS NOUS"
objecteD2 = D()
objecteD3 = D()
objecteD4 = D()
objecteD2.metodeD()
objecteD3.metodeD()
objecteD4.metodeD()
# als objectes creats prèviament no els afectaria
print(objecteD.d, "cometes buides")
objecteD.metodeD()
 
 
# classe amb constructor (a Python només pot haver-hi 1 constructor de classe)
# self es obligatori
# constructor __init__ s'escriu amb doble guió baix
# si l'escrivíssim malament (per exemple un guió simple) no donaria error sinó que seria un mètode vulgar
class E():
    def __init__(self):
        print("salutacions des del constructor")
 
 
objecteE = E()  # en instanciar l'objecte s'executa el constructor
 
 
# classe ambn constructor i atributs d'instància
class F():
    def __init__(self, f):
        # atributs d'instància: són especifics de cada objecte
        # inicialitzem els atributs d'instància amb els paràmetres del constructor
        self.atributf = f
        print("salutacions des del constructor i " + f)
 
 
objecteF = F("salutacions des d'atribut d'instància passat com a paràmetre")
 
 
# salutacions des del constructor i salutacions des d'atribut d'instància passat com a paràmetre
 
# exemple complet
class Cotxe():  # els 'docstring' s'escriuran sota la declaració amb triples cometes
    """ aquesta classe construeix les característiques d'un cotxe """
 
    n_rodes = 4  # atribut de classe
 
    def __init__(self, color):
        # és habitual usar per a l'atribut el mateix identificador del paràmetre
        self.color = color  # atribut d'instància que pren el valor del paràmetre
        self.velocitat = 0  # atribut d'instància independent de cap paràmetre
 
    # mètode sense cos (sense sentències)
    def frena(self):
        pass
 
    def accelera(self, acceleracio):
        """ mètode accelera amb el paràmetre acceleració """
        self.velocitat = self.velocitat + acceleracio
        # acceleració no duu el self al davant
        # ja que no és un membre de la classe sinó un paràmetre de mètode
 
 
cotxe1 = Cotxe("gris")
print(cotxe1.n_rodes, cotxe1.color, cotxe1.velocitat)  # 4 gris 0
 
cotxe2 = Cotxe("blau")
cotxe2.n_rodes = 3
cotxe2.frena()  # no executa res
cotxe2.accelera(50)
cotxe2.accelera(70)
print(cotxe2.n_rodes, cotxe2.color, cotxe2.velocitat)  # 3 blau 120