En class er et python objekt som inneholder et sett av egenskaper og metoder som kan forenkle deler av en kode ved å redefinere verdier i en slags blåkopi.
Eksempel, uten class
Et eksempel kan være konseptet biler: vi vet de har hjul, dører, ratt, seter. I Funksjonell Programmering så kan man for eksempel definere en bil slik:
car_doors=4car_wheels=4car_seats=5car_steering_wheels=1car_name="Civic"car_manufacturer="Honda"car_year=2022print(f'{car_manufacturer}{car_name} from {car_year}')# Honda Civic from 2022
Her vil vi sitte igjen med mange variabler (individuelle objekter) som kan brukes i et program som omhandler biler, men verdiene brukes individuelt.
Eksempel, med class
Bruker vi en class kan vi heller definere hva en bil er, og derav definere hva verdiene skal kunne brukes til. I eksempelet vil det brukes en @dataclassdekoratør, som forenkler syntaksen til å generere en class.
fromdataclassesimportdataclass@dataclassclassCar:name:strmanufacturer:stryear:int=2022# standardverdiwheels:int=4doors:int=4seats:int=5honda=Car('Civic','Honda',year=2021)print(f'{honda.manufacturer}{honda.name} from {honda.year}')# Honda Civic from 2021tesla=Car('Model 3','Tesla')print(f'{tesla.manufacturer}{tesla.name} from {tesla.year}')# Tesla Model 3 from 2022
Funksjonellt sett er koden helt lik, men likevel forskjellig med tanke på lesbarhet.
Funksjoner i klasser
En ting som gjør klasser mer unik er evnen til å definere Getters og Setters; en metode å hente (eller lagre) informasjon på. Et eksempel på en innebygd getters er __str__(self) funksjonen. __str__(self) definerer hvordan objektet vil se ut i tekst.
Dersom vi tar eksempelet over og prøver å printe objektet, vil vi få følgende resultat:
fromdataclassesimportdataclass@dataclassclassCar:name:strmanufacturer:stryear:int=2022# standardverdi wheels:int=4doors:int=4seats:int=5def__str__(self):returnf'{self.manufacturer}{self.name} from {self.year}'tesla=Car('Model 3','Tesla')print(tesla)# Tesla Model 3 from 2022
Vi kan også bruke noe som heter @property dekoratører, som definerer en metode å hente informasjon på, for eksempel en kode for å hente hele navnet til bilen:
@dataclassclassCar:...@propertydeffullname(self):returnf'{self.manufacturer}{self.name}'tesla=Car('Model 3','Tesla')print(tesla.fullname)# Tesla Model 3
fromdataclassesimportdataclassfromdatetimeimportdatetime,date@dataclassclassCreditCard:number:intexp_month:intexp_year:intcard_holder:str@propertydefexp_date(self):exp=f'{self.exp_year}-{self.exp_month}'returndatetime.strptime(exp,"%Y-%m").date()@propertydefisValid(self)->bool:returnself.exp_date>date.today()defPay(Price:float,Card:CreditCard):ifCard.isValid:print(f'Payment of {Price},- was succesful')else:print(f'Sorry {Card.card_holder}, could not complete the transaction. Reason: Expired Card')cc1=CreditCard(123456789,12,2048,'Jens')cc2=CreditCard(123456789,12,1948,'Bob')Pay(1500,cc1)Pay(1500,cc2)# Payment of 1500,- was succesful# Sorry Bob, could not complete the transaction. Reason: Expired Card