På ett objektorienterat språk är en klass en förlängningsbar kod som representerar en mall för att skapa och använda objekten i den klassen. Ett objekt i en klass refererar helt enkelt till en instans av den definierade klassen.
Python Class Basics
I programmeringsspråket Python representeras varje datadel som en förekomst av någon klass. Om du inte känner till språket, se vår nybörjarguide till Python innan du går vidare.
En klass ger en uppsättning beteenden i form av medlemsfunktioner (även kända som metoder), som har implementeringar som är gemensamma för alla instanser av den klassen, och det bestämmer också hur staten information för dess instans representeras i form av attribut.
Läs mer: Klassmetoder i Python: de viktiga skillnaderna
Koden nedan representerar ett exempel på en definierad klass i Python. Den klass som definieras i koden ger en implementering av en RaceCar-klass.
Varje förekomst av klassen ger en enkel modell för olika bilmärken och den innehåller följande tillstånd information: bilens namn, förarens namn, bilens registreringsnummer, aktuell hastighet, hastighetsavgift och Färg.
Denna bilklass modellerar en speciell sensor inom varje bil som registrerar böter på $ 50 mot föraren av bilen om han eller hon överskrider den lagliga hastighetsgränsen på 140 miles per timme.
Exempel på klass (bilklass)
klassbil:
#Konstruktör
# the init-metoden ansvarar för att initialisera värdena för instansen #variables i klassen.
def __init __ (self, car_name, driver_name, licens_plate_number,
current_speed, speeding_charge, color):
själv.bilnamn = bilnamn
self._driver_name = driver_name
self._license_plate_number = licens_plate_number
self._current_speed = aktuell_hastighet
self._speeding_charge = hastighetsavgift
själv._färg = färg
#Accessor-metoder
# Metoden get_car_name returnerar bilens namn
def get_car_name (själv):
returnera själv._bil_namn
# Metoden get_driver_name returnerar namnet på drivrutinen
def get_driver_name (själv):
returnera själv._förare_namn
# Metoden get_license_plate returnerar bilens registreringsskylt
def get_license_plate (själv):
returnera själv._licens_platta
# Metoden get_current_speed returnerar den aktuella hastigheten med vilken bilen # rör sig
def get_current_speed (själv):
returnera själv._ström_hastighet
# Metoden get_speeding_charge returnerar den totala summan pengar som
# driver måste betala för överhastighet
def get_speeding_charge (själv):
returnera själv._hastighet_laddning
# Get_colour-metoden returnerar färgen på vår söta åktur!
def get_colour (själv):
återvänd själv._färg
#Mutator-metoder
#Värdet set_driver ändrar föraren av vår bil.
def set_driver (själv, ny_driver):
self._driver_name = new_driver
#Snabb_metodmetoden säkerställer att föraren debiteras 50 dollar när # han eller hon fångade fart över 140 mil i timmen :(
def speeding_ticket (själv, aktuell_hastighet):
om aktuell_varvtal <= 140:
returnera Falskt
annan:
själv._hastighetsavgift + = 50
återvänd True
# Make_payment-metoden säkerställer att föraren kan betala för alla #belopp som han eller hon är skyldig för snabba biljettavgifter.
def make_payment (själv, belopp_betalt):
self._speeding_charge - = belopp_betalt
En förklaring av Python-klasssexemplet
"Själv" -parametern
Observera först att det finns en skillnad mellan metodsignaturen som deklarerats i klassen och metodsignaturen som används av programmeraren för att anropa funktionen. Till exempel få_färg Metoden enligt definitionen i klassen tar en parameter som är ”själv” -parametern.
Men när programmeraren anropar den här metoden för en instans av klassen, ger han inga parametrar. Samma fenomen kan observeras i metoden speeding_ticket som definieras för att ta två parametrar i klassen (dvs. själv och nuvarande hastighet), men programmeraren kan utföra denna metod genom att bara ange värdet för 'nuvarande_varvtal' parameter.
Detta beror på att syftet med den "själv" -parameter som tillhandahålls är att binda metoden till den objektinstans som den anropades till och att det inte är ett värde som programmeraren ska ge.
Konstruktören
En konstruktör av en klass hänvisar till metoden för klassen som en användare kan ringa för att skapa en objektinstans av den klassen. I klassen Bil kan användaren skapa en objektinstans genom att använda följande syntax:
# skapar vår egen Bugatti :)
Bil (“Bugatti”, “David Sasu”, 90828, 0, 0, "Cherry Red")
Körningen av den här koden resulterar i ett anrop till __init__-metoden i bilklassen. Ansvaret för denna metod är att generera ett nyskapat kreditbilobjekt med angivna instansvärden. Varje objekt i bilklassen består av sex instansvariabler som är:
- _bil_namn
- _förarens_namn
- _registreringsskylt
- _nuvarande hastighet
- _hastighet_laddning
- _Färg
Tillbehörsmetoder
Dessa är metoder som skrivs för att komma åt tillståndsinformationen för en objektinstans. I bilklassen är accessormetoderna som skrevs:
- get_car_name
- get_driver_name
- get_license_plate
- get_current_speed
- get_speeding_charge
- få_färg
Mutatormetoder:
Dessa är metoder som skrivs för att ändra tillståndsinformation för en objektinstans. I bilklassen är mutatormetoderna som skrevs:
- set_driver
- Fortkörningsböter
- betala
Begreppet inkapsling
”Encapsulation” är en term som används för att beskriva en princip för objektorienterad design där komponenter i ett program inte ska avslöja de interna detaljerna i deras respektive implementeringar. För att öka din förståelse för begreppet inkapsling, se vår artikel om inkapsling.
Fel vid kontroll
Vår implementering av bilklassen är inte robust eftersom den sannolikt kommer att krascha eller fungera fel beroende på den ingång som den får från programmeraren.
Observera först att vi inte kontrollerar parametertyperna för speeding_ticket och make_payment-metoderna, och vi kontrollerar inte heller typerna av någon av parametrarna för konstruktören. Detta kan leda till att programmet kraschar om användaren ger ett argument som inte förväntades. Till exempel, om användaren ringer ett samtal som speeding_ticket (“chips ahoy”) skulle programmet krascha eftersom den typ som metoden förväntade sig var ett heltal och inte en sträng.
Nu förstår du Python Class Basics
I den här artikeln har du introducerats till konceptet med en Python-klass och ett Python-klassobjekt. Du har också introducerats till de idéer som en pythonklass bygger på, såsom: inkapsling, "själv" -identifierare, accessormetoder och mutatormetoder.
Med den här informationen borde du kunna skapa en enkel Python-klass på egen hand och testa den :)
Nu måste du verifiera din identitet via din mobila enhet för att länka ditt konto på skrivbordet och webbappen.
- Programmering
- Pytonorm
Prenumerera på vårt nyhetsbrev
Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!
Ett steg till…!
Bekräfta din e-postadress i e-postmeddelandet som vi just skickade till dig.