Idemo otmjeno: kako stvoriti module i klase s Pythonom

U objektno orijentiranim računalnim jezicima kao što je Python, klase su u osnovi predložak za stvaranje vlastitih objekata. Objekti su enkapsulacija varijabli i funkcija u jedan entitet. Objekti dobivaju svoje varijable i funkcije iz klasa.

Što reći?

Evo nekoliko primjera koji će vam pomoći da razumijete - čitajte dalje. Tu je i interaktivna ljuska koda, jednostavno pritisnite gumb "Pokreni" na vrhu određenog prozora.

Najjednostavniji način za opis klasa i kako ih koristiti je sljedeći:

Zamislite da imate velike moći. Stvorite vrstu ("klasu").

Zatim kreirate atribute za tu vrstu ("svojstva") - visina, težina, udovi, boja, moći itd.

Zatim stvorite primjerak te vrste - psa Fido, Drogona iz Igre prijestolja itd. Tada radite sa ovim primjercima:

  • Na primjer, u igri bi se uključili u akciju, komunicirali koristeći svoje atribute.
  • U bankarskoj aplikaciji to bi bile različite transakcije.
  • U aplikaciji za kupnju / prodaju / trgovinu / zakup vozila, tada bi klasa vozila mogla stvoriti podklase kao što su automobili. Svaka bi imala atribute kao što su kilometraža, opcije, značajke, boja i obloga.

Već vidite zašto je to korisno. Stvarate, ponovno upotrebljavate, prilagođavate i poboljšavate stavke na vrlo učinkovit, logičan i koristan način.

Do sada ste vjerojatno shvatili da je ovo način klasificiranja i grupiranja, sličan onome kako ljudi uče:

  • Životinje su u osnovnom smislu živa bića koja nisu ljudi ili drveće
  • onda prelazite na različite vrste životinja - psi, mačke su vjerojatno prve životinje o kojima je većina nas naučila
  • zatim prelazite na različite atribute životinja - oblike, veličine, zvukove, dodatke i tako dalje.

Na primjer, dok ste bili dijete, vaše prvo razumijevanje psa vjerojatno je bilo nešto što je lajalo s četiri noge. Tada ste naučili razlikovati da su neki pravi psi, a drugi igračke. Da je ovaj koncept "psa" sadržavao mnogo vrsta.

Stvaranje i korištenje klasa je u osnovi:

  • izrada predloška za stavljanje „stvari“ u - klasifikaciju
  • koji se potom mogu operirati. Na primjer, povlačenje svih ljudi sa psima za koje biste mogli zatražiti da ih povežu s blogom o kućnim ljubimcima ili svih bankovnih klijenata koji mogu biti dobri izgledi za novu kreditnu karticu.

Glavna poanta ovdje su klase objekti koji mogu stvoriti primjerke tih predložaka, na koje se mogu primijeniti operacije i metode. To je izvrstan način za konceptualizaciju, organizaciju i izgradnju hijerarhije za bilo koju organizaciju ili proces.

Kako naš svijet postaje sve složeniji, ovo je način za oponašanje te složenosti iz hijerarhijske perspektive. Također gradi dublje razumijevanje procesa i interakcija za poslovne, tehničke i društvene postavke s virtualne točke informacijske tehnologije.

Primjer bi mogla biti video igra koju kreirate. Svaki znak može biti "klasa" sa svojim atributima koja komunicira s instancama drugih klasa. Kralj George iz klase "King" mogao bi komunicirati s Court Jesterom Funnymanom iz klase "Clown", i tako dalje. Kralj bi mogao imati kraljevsku klasu "sluga", a klasa "sluga" uvijek bi imala klasu "kralj", na primjer.

Ovo ćemo učiniti:

  • stvoriti razred i koristiti ga
  • stvoriti modul i premjestiti stvaranje i pokretanje klase u modul
  • pozvati modul u novom programu da biste koristili klasu

Kôd je dostupan u GitHubu ovdje.

#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')

Ajmo sada stvoriti modul i premjestiti dio gornjeg koda u modul. Kad god trebamo stvoriti ovaj jednostavni skup x, y koordinata u bilo kojem programu, za to možemo koristiti modul.

Što je modul i zašto nam je potreban?

Modul je datoteka koja sadrži Python definicije i izjave. Modul je Python kôd koji se može pozvati iz drugih programa za najčešće korištene zadatke, bez potrebe da ih upisujete u svaki program koji ih koristi.

Na primjer, kada zovete "matplotlib.plot", pozivate paketni modul. Da nemate ovaj modul, morali biste definirati funkcionalnost grafikona u svakom programu koji je koristio grafikon parcele.

Iz Python dokumentacije:

Ako napustite tumač Python i ponovo ga unesete, definicije koje ste napravili (funkcije i varijable) se gube. Stoga, ako želite napisati nešto duži program, bolje je da koristite uređivač teksta za pripremu unosa za tumač i da ga umjesto toga pokrenete s tom datotekom kao ulazom. To je poznato kao stvaranje skripte. Kako se vaš program produžava, možda ćete ga htjeti podijeliti u nekoliko datoteka radi lakšeg održavanja. Možda ćete htjeti koristiti i korisnu funkciju koju ste napisali u nekoliko programa bez kopiranja njene definicije u svaki program. Da bi to podržao, Python ima način da definicije stavi u datoteku i koristi ih u skripti ili u interaktivnoj instanci tumača. Takva se datoteka naziva modul;definicije iz modula mogu se uvesti u druge module ili u glavni modul (zbirka varijabli kojima imate pristup u skripti koja se izvršava na najvišoj razini i u načinu kalkulatora).

Evo našeg jednostavnog modula. Potrebno je stvaranje klase i funkcije za premještanje instance te klase iz gornjeg programa u vlastitu klasu. Tada ćemo to koristiti u novom programu jednostavno pozivanjem i referenciranjem ovog modula:

Primijetite što smo radili gore:

  • stvorio i inicijalizirao klasu
  • stvorio funkciju za pomicanje instance klase u četiri glavna smjera (gore, dolje, desno, lijevo) i priraštaje - kao parametre ili argumente funkcije
  • stvorio je drugu funkciju za izračunavanje udaljenosti između dva primjerka klase, koristeći formulu grafičke udaljenosti

Evo kako ćemo pomoću novog modula ponovo napisati isti program iz prvog dijela. Obavijest u odjeljku uvoza na početku, sada uvozimo simple_module1modul koji smo upravo kreirali:

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
  • Classes and Objects — learnpython.org