På et objektorienteret sprog er en klasse et udvideligt stykke kode, der repræsenterer en skabelon til oprettelse og brug af objekterne i den klasse. Et objekt i en klasse refererer simpelthen til en forekomst af den definerede klasse.
Grundlæggende om Python-klassen
I Python-programmeringssproget er hvert stykke data repræsenteret som en forekomst af en klasse. Hvis du ikke er fortrolig med sproget, se vores begynderguide til Python inden du går videre.
En klasse giver et sæt adfærd i form af medlemsfunktioner (også kendt som metoder), som har implementeringer, der er fælles for alle forekomster af denne klasse, og det bestemmer også den måde, hvorpå tilstandsoplysningerne for dens instans er repræsenteret i form af egenskaber.
Læs mere: Klassemetoder i Python: De vigtige forskelle
Koden nedenfor repræsenterer et eksempel på en defineret klasse i Python. Den klasse, der er defineret i koden, giver en implementering af en RaceCar-klasse.
Hver forekomst af klassen giver en simpel model til forskellige bilmærker, og den indeholder følgende tilstand oplysninger: bilens navn, førerens navn, bilens nummerplade, aktuelle hastighed, hastighedsafgift og farve.
Denne bilklasse modellerer en speciel sensor inden for hver bil, der registrerer en bøde på $ 50 mod føreren af bilen, hvis han eller hun overskrider den lovlige hastighedsgrænse på 140 miles i timen.
Eksempel på en klasse (bilklasse)
klasse bil:
#Konstruktør
# the init-metoden er ansvarlig for initialisering af værdierne for instansen #variables i klassen.
def __init __ (self, car_name, driver_name, licens_plate_number,
nuværende hastighed, hastighedsudladning, farve):
self.car_name = bilnavn
self._driver_name = driver_name
self._license_plate_number = licens_plate_number
self._current_speed = nuværende_hastighed
self._speeding_charge = hastighedsopladning
self._colour = farve
#Accessor-metoder
# Metoden get_car_name returnerer navnet på bilen
def get_car_name (selv):
returner selv._bil_navn
# Metoden get_driver_name returnerer navnet på driveren
def get_driver_name (selv):
returner selv._drivernavn
# Metoden get_license_plate returnerer bilens nummerplade
def get_license_plate (selv):
returner selv._licens_plade
# Metoden get_current_speed returnerer den aktuelle hastighed, hvormed bilen # bevæger sig
def get_current_speed (selv):
returner selv._strøm_hastighed
# Get_speeding_charge-metoden returnerer det samlede beløb, som
#driver skal betale for overkørsel
def get_speeding_charge (selv):
returner selv._hastighed_afgift
# Get_colour-metoden returnerer farven på vores søde tur!
def get_colour (selv):
returner selv._farve
#Mutator-metoder
# Set_driver-værdien ændrer føreren af vores bil.
def set_driver (selv, ny_driver):
self._driver_name = new_driver
#Feeding_ticket-metoden sikrer, at føreren opkræves 50 bukke, når # han eller hun blev fanget med at køre hurtigere end 140 miles i timen :(
def speeding_ticket (selv, nuværende_hastighed):
hvis nuværende_hastighed <= 140:
returner Falsk
andet:
self._speeding_charge + = 50
returner sandt
# Make_payment-metoden sikrer, at chaufføren er i stand til at betale for alt det #beløb, som han eller hun skylder for hurtig billetafgift.
def make_payment (selv, beløb_betalt):
self._speeding_charge - = beløb_betalt
En forklaring på Python Class-eksemplet
"Selv" -parameteren
For det første skal du bemærke, at der er en forskel mellem metodesignaturen, der er erklæret i klassen, og den metodesignatur, der bruges af programmøren til at kalde funktionen. For eksempel få_farve metode som defineret i klassen tager en parameter, der er 'selv' parameteren.
Men når programmøren kalder denne metode på en forekomst af klassen, giver han ingen parametre. Det samme fænomen kan observeres i metoden speeding_ticket, som er defineret til at tage to parametre i klassen (dvs. selv og nuværende_hastighed), men programmøren er i stand til at udføre denne metode ved at angive værdien for kun 'nuværende_hastighed' parameter.
Dette skyldes, at formålet med den 'selv' parameter, der er angivet, er at binde metoden til den objektforekomst, som den blev kaldt til, og det er ikke en værdi, der skal gives af programmøren.
Konstruktøren
En konstruktør af en klasse henviser til metoden i klassen, som en bruger kan ringe til for at oprette en objektforekomst af den pågældende klasse. I klassen Bil kan brugeren oprette en objektforekomst ved hjælp af følgende syntaks:
# skaber vores helt egen Bugatti :)
Bil (“Bugatti”, “David Sasu”, 90828, 0, 0, "Cherry Red")
Udførelsen af denne kode resulterer i et opkald til __init__-metoden i bilklassen. Ansvaret for denne metode er at generere et nyoprettet kreditbilobjekt med de angivne instansværdier. Hvert objekt i bilklassen består af seks instansvariabler, som er:
- _bil_navn
- _drivernavn
- _nummerplade
- _strøm_hastighed
- _hastighed_afgift
- _farve
Accessor Metoder
Dette er metoder, der er skrevet for at få adgang til tilstandsinformationen for en objektinstans. I bilklassen er de tilgangsmetoder, der blev skrevet:
- get_car_name
- get_driver_name
- get_license_plate
- get_current_speed
- get_speeding_charge
- få_farve
Mutatormetoder:
Dette er metoder, der er skrevet for at ændre tilstandsinformationen for en objektinstans. I bilklassen er mutatormetoderne, der blev skrevet:
- sæt_driver
- fartbøde
- make_payment
Begrebet indkapsling
'Encapsulation' er et udtryk, der bruges til at beskrive et princip med objektorienteret design, hvor komponenter i et program ikke skal afsløre de interne detaljer i deres respektive implementeringer. For at øge din forståelse af begrebet indkapsling, se vores artikel om indkapsling.
Fejl ved kontrol
Vores implementering af bilklassen er ikke robust, da den sandsynligvis går ned eller fungerer forkert afhængigt af det input, den modtager fra programmøren.
Først skal du bemærke, at vi ikke kontrollerer typerne af parametrene for speeding_ticket og make_payment-metoderne, og vi kontrollerer heller ikke typen af nogen af parametrene for konstruktøren. Dette kan føre til, at programmet går ned, hvis brugeren giver et argument, som ikke var forventet. For eksempel, hvis brugeren foretager et opkald som f.eks speeding_ticket (“chips ahoy”), ville programmet gå ned, fordi den type, som metoden forventede, var et heltal og ikke en streng.
Nu forstår du Python Class Basics
I denne artikel er du blevet introduceret til konceptet med en Python-klasse og et Python-klasseobjekt. Du er også blevet introduceret til de ideer, hvorpå en python-klasse er bygget, såsom: indkapsling, 'selv' identifikator, accessormetoder og mutatormetoder.
Med disse oplysninger skal du være i stand til at oprette en simpel Python-klasse alene og teste den :)
Nu bliver du nødt til at bekræfte din identitet via din mobilenhed for at linke din konto til skrivebordet og webappen.
- Programmering
- Python
Abonner på vores nyhedsbrev
Deltag i vores nyhedsbrev for tekniske tip, anmeldelser, gratis e-bøger og eksklusive tilbud!
Et trin mere !!!
Bekræft din e-mail-adresse i den e-mail, vi lige har sendt dig.