Diferència entre revisions de la pàgina «POO Classes»
Línia 2: | Línia 2: | ||
== Classe i instància == | == Classe i instància == | ||
− | ... | + | * Una '''classe''' defineix un tipus de dades, però no la crea. |
+ | * Una '''instància''' és un objecte real creat a partir del model d'una classe. | ||
+ | * Els '''atributs''' (variables internes) els creem inicialitzant-los a un valor dins de la classe. | ||
+ | * Els '''mètodes''' (funcions internes) es creen amb def i TOTES tenen com a primer argument '''self''' == la instància que el crida. | ||
+ | |||
+ | Creem la classe: | ||
+ | <syntaxhighlight lang="python"> | ||
+ | class Pilota(): | ||
+ | velocitat = 10 | ||
+ | posx = 10 | ||
+ | posy = 12 | ||
+ | def accelera(self): | ||
+ | self.velocitat = self.velocitat + 5 | ||
+ | def posicio(self,x,y): | ||
+ | self.posx = x | ||
+ | self.posy = y | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Creem la instància "p" i accedim als atributs: | ||
+ | >>> p = Pilota() | ||
+ | >>> p.velocitat | ||
+ | 10 | ||
+ | >>> p.posy | ||
+ | 12 | ||
+ | |||
+ | Per executar una funció s'han de posar els parèntesis (): | ||
+ | >>> p.accelera() | ||
+ | >>> p.velocitat | ||
+ | 15 | ||
+ | |||
+ | Quan els mètodes tenen paràmetres cal tenir en compte que el primer sempre serà '''self'''. Aquest és necessari per accedir als atributs de la instància que crida l'objecte. Però quan cridem la funció s'ha d'obviar el "self". Per exemple, en el nostre cas tenim posicio(self,x,y) , però per cridar la funció posició ho fem només amb la x i la y: | ||
+ | |||
+ | >>> p.posicio(40,30) | ||
+ | >>> p.posx | ||
+ | 40 | ||
+ | >>> p.posy | ||
+ | 30 | ||
+ | |||
+ | <br> | ||
== Constructors i destructors == | == Constructors i destructors == |
Revisió del 22:37, 3 set 2012
...intro...
Contingut
Classe i instància
- Una classe defineix un tipus de dades, però no la crea.
- Una instància és un objecte real creat a partir del model d'una classe.
- Els atributs (variables internes) els creem inicialitzant-los a un valor dins de la classe.
- Els mètodes (funcions internes) es creen amb def i TOTES tenen com a primer argument self == la instància que el crida.
Creem la classe:
class Pilota():
velocitat = 10
posx = 10
posy = 12
def accelera(self):
self.velocitat = self.velocitat + 5
def posicio(self,x,y):
self.posx = x
self.posy = y
Creem la instància "p" i accedim als atributs:
>>> p = Pilota() >>> p.velocitat 10 >>> p.posy 12
Per executar una funció s'han de posar els parèntesis ():
>>> p.accelera() >>> p.velocitat 15
Quan els mètodes tenen paràmetres cal tenir en compte que el primer sempre serà self. Aquest és necessari per accedir als atributs de la instància que crida l'objecte. Però quan cridem la funció s'ha d'obviar el "self". Per exemple, en el nostre cas tenim posicio(self,x,y) , però per cridar la funció posició ho fem només amb la x i la y:
>>> p.posicio(40,30) >>> p.posx 40 >>> p.posy 30
Constructors i destructors
- El constructor és un mètode que es crida al crear l'objecte. En Python és __init__.
- El destructor es crida al destruïr l'objecte. En Python és __del__.
Exemple:
class A():
def __init__(self):
print "construint l'objecte..."
def __del__(self):
print "destruim-lo!"
Comprovem que realment els mètodes son cridats:
>>> a = A() construint l'objecte... >>> del a destruim-lo!
NOTA PER CLASSES HEREDADES: el constructor de la subclasse sobreescriu el de la superclasse. Per controlar si el cridem es pot fer servir la sentència "super", veure en l'apartat d'herència més avall.
Herència
...
...cridant al constructor pare... (super)
Herència múltiple
...
Sobrecàrrega
...
Operadors
...
Visibilitat
...
Classes i mètodes virtuals
...