1 Föreläsning 8 Mer om klasser och objektorientering
2 self Self är en variabel som refererar från instansen till instansen själv.
3 Speciella metoder Vid jämförelse av två instanser av samma klass anropas: __cmp__(self, other) Ska returnera negativt tal om self other.
4 Privata variabler Om en klass vill dölja en variabel för andra klasser kan man göra variabeln ”privat”: class A(object): def __init__(self, mySecret): self.__mySecret = mySecret a = A(”I love Sofie”) print a.mySecret ??? Error ??? print a.__mySecret ??? Error ??? print a._A__mySecret ger: I love Sofie
5 Privata metoder Om en klass vill dölja en metod för andra klasser kan man göra metoden ”privat”: class A(object): ….. def __mySecretMethod(self): print ”I love candy!” a = A(”I love Sofie”) a.mySecretMethod() ??? Error ??? a.__mySecretMethod() ??? Error ??? a._A__mySecretMethod() ger: I love candy!
6 Privata variabler och metoder En variabel eller metod som börjar med två understreck är ”privat”. För att komma åt variabeln/metoden inom klassen används namnet (med de två understrecken) som vanligt. Utanför klassen skall variabeln/metoden egentligen inte användas, men den kan kommas åt genom att använda ett understreck och klassens namn, tex _A, som prefix.
7 Överlagring av metoder Överlagring av en metod är då man definierar om en metod i en klass som klassen har ärvt från superklassen.
8 Exempel class Parallellogram(object): kant1 = None basKant = None hojd = None def __init__(self, a, b, h): self.kant1 = a self.basKant = b self.hojd = h def area(self): return self.hojd * self.basKant def omkrets(self): return 2 * (self.kant1 + self.basKant)
9 Exempel class Rektangel(Parallellogram): def __init__(self, a, b): super(Rektangel, self).__init__(self, a, b, b) def area(self): return self.kant1 * self.basKant class Kvadrat(Rektangel): def __init__(self, a): super(Rektangel, self).__init__(self, a, a, a)
10 Utökning Man utökar en subklass när man definierar nya metoder i en subklassen som inte är definierade i superklassen.
11 Polymorfism Polymorfism är möjligheten att kunna använda samma attribut i två eller fler objekt av olika klasser och få olika resultat.