En jevn forfriskning på Pythons klasser og objekter

Python kommer med mange innebygde datatyper, for eksempel dikt, liste, sett, etc. Har du noen gang lurt på om du kan lage dine egne datatyper? Som person, bil, universitet, etc.? Ville det være mulig å opprette slike datatyper? Ja, det er sikkert mulig i Python, og det er her klasser og objekter kommer inn i spill.

I denne opplæringen skal jeg beskrive hva som menes med a klasse og en gjenstand, og hvordan vi kan jobbe med dem i Python.

Klasser og objekter

Som nevnt ovenfor handler klasser og objekter om å lage din egen datatype (dvs. brukerdefinerte datatyper). EN klasse er således en brukerdefinert datatype, og å skape forekomster av en klasse (instantiation) betyr å skape objekter av den typen. På slutten av dagen betraktes klasser og objekter som hovedbyggesteinene for Python, som er et objektorientert programmeringsspråk.

Hva ville det være å lage en klasse i Python? Den enkleste klassestrukturen i Python ser ut som følger:

klasse ClassName: uttalelser

Som du kan se, defineres en klasse med klasse søkeord og klassenavn er navnet på klassen (identifikator). Husk at klassenavnet følger de samme reglene som variable navn i Python, det er navnet kan bare starte med et brev eller understrek _, og kan bare inneholde bokstaver, tall. eller understreker. Også, med henvisning til PEP 8 (Style Guide for Python Code), kan vi se at det anbefales å navngi klasser i CapWords (øvre CamelCase) stil.

La oss nå definere en klasse Person, som for øyeblikket ikke vil inneholde noe, bortsett fra passere uttalelse. Som nevnt i Pythons dokumentasjon:

De passere uttalelse gjør ingenting. Den kan brukes når en setning er påkrevd syntaktisk, men programmet krever ingen handling
klasse Person: pass

For å opprette en forekomst (objekt) av denne klassen, kan vi bare gjøre følgende:

abder = Person ()

Dette betyr at vi har opprettet et nytt objekt abder av type Person. Legg merke til at det å opprette et objekt bare har klassenavnet etterfulgt av parenteser.

Vi kan identifisere hvilken type abder er, og hvor den tilhører i minnet ved å skrive: skriv ut abder. I dette tilfellet får du noe som følger:

<__main__.Person instance at 0x109a1cb48>

Egenskaper

Attributter er som egenskaper vi vil legge til i klassen (type). For eksempel, for vår klasse Person, la vi legge til to attributter: Navn og skole, som følger:

klasse Person: navn = "school ="

Nå kan vi lage et nytt objekt av typen Person (forekomst av Person) med flere detaljer, siden det nå har noen attributter, som følger:

abder = Person () abder.name = 'Abder' abder.school = 'ABC University'

metoder

Metoder er som funksjoner i Python, fordi de er definert med søkeordet def og har samme formatering som funksjoner. I vår klasse, la oss definere en metode som skriver ut personens navn og skole. Klassen vil se ut som følger:

klasse Person: navn = "skole =" def print_name (selv): skriv ut selv.navn def print_school (selv): skriv ut selv.school abder = Person () abder.name = 'Abder' abder.school = 'XY University' abder .print_name () abder.print_school ()

Jeg nevnte ovenfor at metodene er som funksjoner. Men hovedforskjellen er at metodene må ha et argument som er beleilig oppkalt selv-, som refererer til objektet som fremgangsmåten blir påkalt (dvs. abder). Legg merke til at ved å kalle metoden trenger vi ikke å passere selv- Som et argument, som Python vil takle det for oss.

Hvis vi ikke setter selv- som et argument i print_name (), her er hvordan Python vil klage:

Traceback (siste anrop sist): File "test.py", linje 14, inn  abder.print_name () TypeError: print_name () tar ingen argumenter (1 gitt)

Du kan selvfølgelig passere mer enn ett argument til metoden. La oss gjøre prosessen med å skrive ut Navn og skole i en metode, som følger:

klasse Person: navn = "skole =" def print_information (selv, navn, skole): skriv ut selv.navn skriv ut selv.school abder = Person () abder.name = 'Abder' abder.school = 'XY Universitet' abder.print_information (abder.name, abder.school) 

Prøv å kjøre programmet - fikk du samme resultat som før?

initialisering

I den forrige delen ble vi initialisert Navn og skole ved å gi dem en tom verdi ". Men det er en mer elegant måte å initialisere variabler til standardverdier, og her er hvor initialisering kommer til nytte.

Initialiseringen er en spesiell metode med navnet __i det__ (metoden anses som spesiell og vil bli behandlet i et spesielt tilfelle, og det er derfor det er to understreker i begynnelsen og på slutten).

La oss endre det forrige programmet for å bruke initialisatoren. I dette tilfellet ser programmet ut som følger:

Klasse Person: def __init __ (selv, n, s): self.name = n self.school = s def print_name (selv): skriv selv.navn def print_school (selv): print self.school abder = Person ('Abder' , 'XY University') abder.print_name () abder.print_school ()

Legg merke til at initialisereren her må ha to argumenter. For eksempel, hvis vi ikke inkluderer n argument i initialisatoren, vil vi få følgende feil:

Traceback (siste anrop sist): File "test.py", linje 12, i  abder = Person ('Abder', 'XY University') TypeError: __init __ () tar nøyaktig 2 argumenter (3 gitt)

Så bunnlinjen er den med klasser du vil kunne lage dine egne datatyper, og med objekter Du vil kunne lage forekomster av disse datatyper. Klasser er også sammensatt av egenskaper (egenskaper) og fremgangsmåter Det er handlinger vi utfører på disse egenskapene.

Hva var den datatypen du alltid ønsket å lage? Gå videre og gjør det!