Lad os blive klassiske: hvordan man opretter moduler og klasser med Python

På objektorienterede computersprog som Python er klasser grundlæggende en skabelon til at oprette dine egne objekter. Objekter er en indkapsling af variabler og funktioner i en enkelt enhed. Objekter får deres variabler og funktioner fra klasser.

Hvad siger du?

Her er nogle eksempler, der hjælper dig med at forstå - læs videre. Der er også en interaktiv kodeskal, tryk blot på "Kør" -knappen øverst i det specifikke vindue.

Den enkleste måde at beskrive klasser på, og hvordan man bruger dem, er denne:

Forestil dig, at du har store kræfter. Du opretter en art ("klasse").

Derefter opretter du attributter for den pågældende art ("egenskaber") - højde, vægt, lemmer, farve, kræfter osv.

Derefter opretter du en forekomst af den art - Fido hunden, Drogon fra Game of Thrones osv. Derefter arbejder du med disse forekomster:

  • I et spil deltager de for eksempel i handling, interagerer ved hjælp af deres attributter.
  • I en bankapp ville det være de forskellige transaktioner.
  • I en app til køb / salg / handel / leasing kan køretøjsklassen derefter gyde underklasser såsom biler. Hver ville have attributter som kilometertal, muligheder, funktioner, farve og trim.

Du kan allerede se, hvorfor dette er nyttigt. Du opretter, genbruger, tilpasser og forbedrer genstande på en meget effektiv, logisk og nyttig måde.

Nu har du sandsynligvis indset, at dette er en måde at klassificere og gruppere på, en der ligner hvordan mennesker lærer:

  • Dyr er levende ting, der ikke er mennesker eller træer, i en grundlæggende forstand
  • så går du videre til forskellige dyretyper - hunde, katte er sandsynligvis de første dyr, de fleste af os lærte om
  • så flytter du til forskellige attributter for dyr - former, størrelser, lyde, vedhæng og så videre.

For eksempel, da du var barn, var din første forståelse af en hund sandsynligvis noget med fire ben, der gøede. Så lærte du at skelne mellem, at nogle var ægte hunde, andre var legetøj. At dette "hundekoncept" indeholdt mange typer.

Oprettelse og brug af klasser er grundlæggende:

  • opbygge en skabelon til at sætte "ting" i - en klassifikation
  • som derefter kan betjenes. For eksempel at trække alle mennesker med hunde op, som du kan anmode om at linke til en blog om kæledyr, eller alle bankkunder, der kan være gode udsigter til et nyt kreditkort.

Hovedpunktet her er klasser er objekter, der kan producere forekomster af disse skabeloner, hvor operationer og metoder kan anvendes. Det er en glimrende måde at konceptualisere, organisere og opbygge et hierarki for enhver organisation eller proces.

Når vores verden bliver mere kompleks, er dette en måde at efterligne denne kompleksitet ud fra et hierarkisk perspektiv. Det bygger også en dybere forståelse af processerne og interaktionerne for forretnings-, tekniske og sociale indstillinger fra et virtuelt informationsteknologipunkt.

Et eksempel kan være et videospil, du opretter. Hver karakter kan være en "klasse" med sine egne attributter, der interagerer med forekomster af andre klasser. Kong George fra "King" -klassen interagerer muligvis med Court Jester Funnyman fra "Clown" -klassen og så videre. En konge kan have en kongelig "tjener" -klasse, og en "tjener" -klasse vil f.eks. Altid have en "konge" -klasse.

Dette er hvad vi vil gøre:

  • opret en klasse og brug den
  • Opret et modul og flyt klassens oprettelse og initiering til modulet
  • kalde modulet i et nyt program for at bruge klassen

Koden er tilgængelig i GitHub her.

#TSB - Create Class in Python - rocket positions (x,y) and graph
#some items and comments bolded to call attention to processimport matplotlib.pyplot as plt
class Rocket(): def __init__(self, x=0, y=0): #each rocket has (x,y) position; user or calling function has choice #of passing in x and y values, or by default they are set at 0 self.x = x self.y = y def move_up(self): self.y += 1 def move_down(self): self.y -= 1 def move_right(self): self.x += 1 def move_left(self): self.x -= 1
#Make a series of rockets - x,y positions, I am calling it rocketrockets=[]rockets.append(Rocket())rockets.append(Rocket(0,2))rockets.append(Rocket(1,4))rockets.append(Rocket(2,6))rockets.append(Rocket(3,7))rockets.append(Rocket(5,9))rockets.append(Rocket(8, 15)) #Show on a graph where each rocket is
for index, rocket in enumerate(rockets): #original position of rockets print("Rocket %d is at (%d, %d)." % (index, rocket.x, rocket.y)) plt.plot(rocket.x, rocket.y, 'ro', linewidth=2, linestyle="dashed", markersize=12) #move the 'rocket' one up rocket.move_up() print("New Rocket position %d is at (%d, %d)." % (index, rocket.x, rocket.y)) #plot the new position plt.plot(rocket.x, rocket.y, 'bo', linewidth=2, linestyle="dashed", markersize=12) #move the rocket left, then plot the new position rocket.move_left() plt.plot(rocket.x, rocket.y, 'yo', linewidth=2, linestyle="dashed", markersize=12)
#show graph legend to match colors with positionplt.gca().legend(('original position','^ - Moved up', '< - Moved left'))plt.show()#plt.legend(loc='upper left')

Lad os nu oprette et modul og flytte noget af koden ovenfor til modulet. Hver gang vi har brug for at oprette dette enkle sæt af x, y-koordinater i ethvert program, kan vi bruge modulet til at gøre det.

Hvad er et modul, og hvorfor har vi brug for det?

Et modul er en fil, der indeholder Python-definitioner og udsagn. Modul er Python-kode, der kan kaldes fra andre programmer til almindeligt anvendte opgaver uden at skulle skrive dem i hvert eneste program, der bruger dem.

For eksempel, når du kalder “matplotlib.plot”, ringer du til et pakkemodul. Hvis du ikke havde dette modul, skulle du definere plotfunktionaliteten i hvert program, der brugte en plotgraf.

Fra Python-dokumentationen:

Hvis du afslutter fra Python-tolken og indtaster den igen, går de definitioner, du har lavet (funktioner og variabler), tabt. Derfor, hvis du vil skrive et noget længere program, er det bedre at bruge en teksteditor til at forberede input til tolk og køre det med filen som input i stedet for. Dette kaldes oprettelse af et script. Når dit program bliver længere, kan du opdele det i flere filer for lettere vedligeholdelse. Du vil muligvis også bruge en praktisk funktion, som du har skrevet i flere programmer uden at kopiere dens definition til hvert program. For at understøtte dette har Python en måde at sætte definitioner i en fil og bruge dem i et script eller i en interaktiv instans. af tolken. En sådan fil kaldes et modul;definitioner fra et modul kan importeres til andre moduler eller til hovedmodulet (samlingen af ​​variabler, som du har adgang til i et script, der udføres på øverste niveau og i lommeregnertilstand).

Her er vores enkle modul. Det tager klasseoprettelsen og funktionerne at flytte en forekomst af den klasse fra programmet ovenfor og ind i sin egen klasse. Vi bruger derefter dette i et nyt program ved blot at ringe og henvise til dette modul:

Bemærk hvad vi gjorde ovenfor:

  • oprettet og initialiseret klassen
  • oprettet en funktion til at flytte en forekomst af klassen i de fire hovedretninger (op, ned, højre, venstre) og trinene - som parametre eller argumenter til funktionen
  • oprettet en anden funktion til at beregne afstanden mellem to forekomster af klassen ved hjælp af grafafstandsformlen

Sådan bruger vi det nye modul til at omskrive det samme program fra første del. Bemærk i importafsnittet i starten, vi importerer nu det simple_module1modul, vi lige har oprettet:

Here’s the output from the code using our module. Note that they are the same, except for the chart title and the shape of the position markers, which I changed for comparative purposes.

That’s great, you may say — what are some other uses for this? One classic example is a bank account. A customer class might contain the name and contact details and — more importantly — the account class would have deposit and withdrawal elements.

This is grossly oversimplified but, for illustrative purposes, it is useful. That’s it — create a template, then define instances of that template with details (properties), and add value by adding, subtracting, modifying, moving, and using these instances for your program objectives.

Still wondering about classes? Ok, let’s get “classy” — here’s another simple illustration. We will call this class “Person”. It has only two properties — name and age. We will then add an instance of this with a person’s name and age, and print it. Depending on what your objective is, you can imagine all the other details you might add — for example, marital status and location preferences for a social networking app, job experience in years and industry specialization for a career related app. Press the little triangle below to see it work.

So there you have it. You can create many different classes, with parent classes, sub-classes and so on. Thanks for reading — please clap if you liked it. Here are some other references if you would like to learn more:

  • Python documentation — Classes
  • Python Object Oriented — Tutorials Point
  • Klasser og objekter - learnpython.org