Sisällysluettelo[Piilottaa][Näytä]
Tällä luennolla opimme luokista, rakentajista ja periytymisestä pythonissa.
Nämä käsitteet ovat todella tärkeitä suuressa ohjelmassa, jossa on määriteltävä erilaisia tyyppejä.
Sarjat
Luokat ovat välttämättömiä ohjelmoinnissa, eivätkä ne ole python-kohtaisia. Monia muita ohjelmointikielet tukea luokkien käsitettä. Luokkien avulla määritämme uusia tietotyyppejä.
Toistaiseksi olemme oppineet Pythonin perustietotyypeistä, kuten numeroista, merkkijonoista ja booleaneista. Nämä ovat Pythonin perus- tai yksinkertaisia tietotyyppejä. Olemme myös nähneet pari monimutkaista tietotyyppiä, kuten luetteloita ja sanakirjoja.
Vaikka nämä tyypit ovat erittäin hyödyllisiä, niitä ei aina voida käyttää monimutkaisten käsitteiden mallintamiseen. Ajattele esimerkiksi ideaa pisteestä tai ostoskorista. Ostoskori ei ole looginen arvo tai luettelo. Se on erilaista dataa. Voimme siis käyttää luokkia uusien tyyppien määrittelemiseen todellisten käsitteiden mallintamiseen.
Määritetään nyt uusi tietotyyppi nimeltä point. Tällä uudella tyypillä tulee olemaan menetelmiä, kuten olemme tarkistaneet aiemmin.
Näin teet sen:
Aloitamme määrittelemällä luokan käyttämällä “luokka”-avainsanaa ja heti sen jälkeen annamme luokallemme nimen.
class Point
Katso nyt tässä käyttämääni nimeämiskäytäntöä. Olen kirjoittanut ensimmäisen kirjaimen isolla, tätä me kutsumme pascal-nimeämiskäytännöksi. Tämä käytäntö on erilainen kuin se, jota käytämme muuttujien ja funktioiden nimeämiseen, joissa käytämme aina pieniä kirjaimia ja erottelemme useat sanat alaviivalla. Mutta luokkien nimeämisessä emme käytä alaviivaa useiden sanojen erottamiseen, vaan kirjoitamme jokaisen sanan ensimmäisen kirjaimen isolla.
Luokkamme määrittämisen jälkeen käytetään kaksoispistettä, mikä tarkoittaa, että nyt on määritelty lohko.
class Point:
def move (self):
Tässä lohkossa voimme määritellä kaikki funktiot tai menetelmät, jotka kuuluvat pisteisiin. Voimme esimerkiksi määrittää funktion nimeltä “move” pisteen siirtämiseksi. Huomaa, että heti kun kirjoitamme avoimet sulut, PyCharm lisää automaattisesti "self" tähän. Tämä on erityinen avainsana, ja palaan tähän pian. Tulostetaan terminaaliin "move".
print("move")
Määritetään toinen menetelmä, kuten "piirrä" ja tulostetaan se päätteelle.
def draw(self):
print("draw")
Olemme lopettaneet "piste"-luokkamme määritelmän. Tämän uuden tyypin avulla voimme luoda uusia objekteja. Luokka yksinkertaisesti määrittelee suunnitelman tai mallin objektien luomiseen, jotka ovat todellisia esiintymiä kyseiseen suunnitelmaan perustuen. Luodaksemme objektin kirjoitamme luokkamme nimen ja kutsumme sitä sitten aivan kuten funktiota. Tämä luo uuden objektin ja palauttaa sen. Sitten voimme tallentaa objektin muuttujaan. Anna kun näytän sinulle:
Tässä olemme määrittäneet "pisteen1", joka on kolmiulotteinen piste. Näet sen, että voimme tulostaa yksittäiset koordinaatit terminaaliin.
Voimme käyttää kahta menetelmää "piirtää" ja "siirtää" tässä pisteessä.
Joten yhteenvetona, käytämme luokkia uusien tyyppien määrittelemiseen ja näillä tyypeillä voi olla menetelmiä, jotka määrittelemme luokan rungossa. Luokilla voi olla attribuutteja, jotka voimme asettaa missä tahansa ohjelmissamme.
Rakentajat
Tähän mennessä olemme oppineet luomaan uusia tyyppejä luokkien avulla. Nyt tässä toteutuksessa on pieni ongelma. Voimme luoda pisteobjektin ilman x- tai y-koordinaattia luokkien avulla, ja se ei ole ihanteellinen. Anna kun näytän sinulle.
Luodaan piste ja tulostetaan se ennen kuin asetamme x-koordinaatin. Ohjelmamme suorittaminen aiheuttaa seuraavanlaisen määritevirheen:
Se tarkoittaa, että pisteobjektilla ei ole attribuuttia nimeltä x. Nyt ongelmana on, että on mahdollista saada pisteobjekti ilman x- tai y-koordinaatteja. Tämä ei ole järkevää, koska aina kun puhumme pisteestä, meidän on tiedettävä, missä se sijaitsee. Tämän ongelman ratkaisemiseksi käytämme konstruktoria. Konstruktori on funktio, jota kutsutaan objektia luotaessa.
Näin käytämme konstruktoria. Ensin välitetään x- ja y-koordinaattiarvot yllä olevassa ohjelmassa.
point = Point(10, 20)
print(point.x)
Nyt meidän on lisättävä tähän luokkaan erityinen menetelmä, jota kutsutaan konstruktoriksi. Sen syntaksi on seuraava:
def __init__(self, x, y):
init
on lyhenne sanoista alustettu, ja tämä on funktio tai menetelmä, jota kutsutaan, kun uusi pisteobjekti luodaan. X ja y lisätään heti perään self
lisätäksesi kaksi ylimääräistä parametria.
Tämän jälkeen meidän pitäisi kartoittaa x ja y ohitettuihin arvoihin eli 10 ja 20
self.x = x
self.y = y
Käytämme self
viitata nykyiseen objektiin ja sitten asetamme x-attribuutin x-argumentille, joka välitetään funktiolle "x". Tällä tavalla käyttämällä init
-menetelmällä voimme alustaa objektimme. Tätä menetelmää kutsutaan konstruktoriksi. Suoritetaan ohjelmamme.
Nyt voimme muuttaa x- ja y-koordinaatteja myöhemmin. Päivitetään x koordinaatti:
point = Point(10, 20)
point.x = 11
print(point.x)
Nyt x-koordinaatti on päivitetty arvoon 11.
Käyttää
Tässä sinulle mielenkiintoinen harjoitus.
Haluan sinun määrittelevän uuden tyypin, jota kutsutaan henkilöksi. Näillä "henkilö"-objekteilla tulee olla "name
"-attribuutti sekä "talk()
”Menetelmä.
Se on yksinkertainen tehtävä, eikä sen pitäisi kestää muutamaa minuuttia kauempaa.
Ratkaisu
Aloita määrittelemällä luokka "henkilö" seuraavasti:
class Person:
self.name = name
Määrittelemme rakentajan myöhemmin. Nyt voimme luoda "Person" -objektin. Kutsutaan sitä Johniksi
john = Person("John Smith")
print(john.name)
john.talk()
Siirry nyt koodin ensimmäiseen osaan ja luo rakentaja.
def __init__(self, name):
Lopullinen koodi näyttää tältä:
Voit myös käyttää muotoiltuja merkkijonoja ja muita käsitteitä luokkien ja rakentajien kanssa.
Perintö
Periytys on toinen käsite, joka liittyy luokkiin, joiden avulla voit käyttää koodia uudelleen.
Harkitse tätä koodinpätkää.
class Dog:
def walk(self):
print("walk")
Olemme luoneet luokan "Koira" "kävely"-menetelmällä. Tässä menetelmässä yksinkertaisesti tulostamme kävelyviestin terminaaliin. Oletetaan, että todellisessa ohjelmassa on 10 koodiriviä yhden rivin sijaan. Jos tulevaisuudessa tarvitaan toista luokkaa "kävely"-menetelmää varten, meidän on toistettava koko koodi. Tämä ei ole ihanteellinen.
Ohjelmoinnissa meillä on periaate nimeltä DRY, joka on lyhenne sanoista älä toista itseäsi. Oletetaan, että joskus tulevaisuudessa löydämme ongelman "kävely"-menetelmässämme ja jos olemme toistaneet tai kopioineet tämän menetelmän monissa muissa paikoissa, meidän on palattava ja korjattava tämä ongelma jokaisessa paikassa, jossa olemme kopioineet tämän. koodi. Siksi ohjelmoinnissa meidän ei pitäisi määritellä jotain kahdesti.
On olemassa erilaisia lähestymistapoja tämän ongelman ratkaisemiseksi, mutta tässä aiomme oppia sen, joka on helpompi aloittelijoille, ja sitä kutsutaan periytymiseksi. Tässä tapauksessa luomme toisen luokan "nisäkäs" ja määritämme "kävely"-attribuutimme kyseisessä luokassa.
class Mammal:
def walk(self):
print("walk")
"Nisäkäs"-luokkamme määrittämisen jälkeen voimme käyttää periytymistä välittämään attribuutit seuraavasti:
Sekä koira- että kissaluokat perivät kaikki emoluokkassaan määritellyt luokkamenetelmät. Nyt voimme lisätä koirille ominaisia menetelmiä, kuten tämä:
class Dog:
def bark(self):
print("bark")
Paketoida!
Tässä oli kyse luokista, rakentajista ja koodin uudelleenkäytöstä luokissa, joissa on perintökäsitteitä. Nyt ollaan sarjamme loppusuoralla. Tässä vaiheessa sinun pitäisi pystyä tuottamaan hyviä, luettavia ja ytimekkäitä koodeja Pythonissa.
Moduulien ja pakettien käsitteen näemme seuraavalla luennolla.
Jätä vastaus