1 / 18

Programmeringsteknik

Skolan för Datavetenskap och kommunikation. Programmeringsteknik. Mer om klasser och objekt: Klass, instans och self Speciella metoder Polymorfism Publikt och privat Lista av objekt. Föreläsning 7. self. self ska stå överallt i klassdefinitionen:

tamira
Download Presentation

Programmeringsteknik

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Skolan för Datavetenskap och kommunikation Programmeringsteknik • Mer om klasser och objekt: • Klass, instans och self • Speciella metoder • Polymorfism • Publikt och privat • Lista av objekt Föreläsning 7

  2. self • self ska stå överallt i klassdefinitionen: • först bland parametrarna: def metod(self,…) • framför varje användning av ett attribut: self.a • …men aldrig i huvudprogrammet

  3. Klass, instanser • Om du definierar en klass i början av programmet… • …så kan du skapa så många objekt (instanser av klassen) du vill i huvudprogrammet.

  4. Speciella metoder • __init__ Anropas automatiskt när nya objekt skapas. Använd den för initiering av instansvariabler! • __str__ Låt den returnera en strängrepresentation av objektet, så vet print hur det ska skrivas ut. • __lt__ Skriv en sån metod om du vill kunna jämföra två objekt (lt står för "less than", operatorn < )

  5. __str__ i klassen Husdjur • Ska returnera en sträng som representerar objektet • Anropas automatiskt om man skriver ut objektet med print: h = Husdjur("Rufus") print(h) • Bra att ha när man testar programmet!

  6. def__str__(self): """Version 1: bara husdjurets namn""" beskrivning = "Jag heter " + self.namn return beskrivning

  7. def__str__(self): """Version 2: alla attribut""" beskrivning = self.namn + "," beskrivning += self.glad + "," beskrivning += self.hunger return beskrivning

  8. def__str__(self): """Version 3: begripligare utskrift""" beskrivning = self.namn + " är " if self.glad > 5: beskrivning += "glad: (^_^)" else: beskrivning += "ledsen: (T_T)" if self.hunger > 3: beskrivning += " och hungrig!" else: beskrivning += " och mätt." return beskrivning

  9. Polymorfism • Kommer av grekiskans polloi(många) och morjh(form) • Med polymorfism menas här möjligheten att ha en metod med samma namn i olika klasser och få olika resultat. • Metoden __str__ som automatiskt anropas av print är ett exempel.

  10. Publikt och privat • Om ett attribut eller en metod definieras med ett namn som börjar med två understreck (t ex __preferens) så är den privat. • Det innebär att den endast kan användas inom klassen (man kommer inte åt den från main). • Annars är den publik, och kan användas i vilken del av programmet som helst.

  11. def__init__(self): """ Ger attributen slumpade värden""" self.__namn = \ choice("BCFKR")+choice("iouy")+\ 2*choice("nst")+choice("aey") self.__glad = randrange(10) self.__hunger = randrange(3) self.__kon = choice(("hona","hane")) self.__preferens = choice(("samma","annat"))

  12. Inkapsling • En väluppfostrad programmerare använder bara attributen inuti klassdefinitionen. • I huvudprogrammet anropar man en åtkomstmetod eller ändringsmetod istället! • Mer att skriva i början men enklare när man vill ändra i klassen senare. • Knepigt? Använd då privata attribut!

  13. defnamn(self): """Åtkomstmetod för namnet""" return self.__namn defbytNamn(self, nyttNamn): """Ändringsmetod för namnet""" self.__namn = nyttNamn

  14. Rita upp ett objekt Husdjur-objekt: "Fussa" __namn __glad 4 __hunger 5 __kön "hona" "samma" __preferens

  15. Lista av objekt • Flera objekt i samma program? djur1 = Husdjur() djur2 = Husdjur() … • Enklare att lägga husdjuren i en lista! [0][1][2][3]

  16. Skapa listan lista = [] for i inrange(n): nytt = Husdjur() lista.append(nytt)

  17. Anropa metod för varje djur for djur in lista: djur.banna()

  18. Var finns programexemplen? • Se "Programexempel" på kurswebsidan

More Related