Sisukord[Peida][Näita]
Selles loengus õpime tundma Pythoni klasse, konstruktoreid ja pärimist.
Need mõisted on väga olulised suures programmis, kus on vaja määratleda erinevad tüübid.
klassid
Klassid on programmeerimisel olulised ja need ei ole pythoni spetsiifilised. Palju teisi programmeerimiskeeled klasside mõistet toetama. Uute andmetüüpide määratlemiseks kasutame klasse.
Siiani oleme õppinud tundma Pythoni põhiandmetüüpe, nagu numbrid, stringid ja tõeväärtused. Need on Pythoni põhilised või lihtsad andmetüübid. Oleme näinud ka paari keerulist andmetüüpi, nagu loendid ja sõnastikud.
Kuigi need tüübid on äärmiselt kasulikud, ei saa neid alati kasutada keerukate kontseptsioonide modelleerimiseks. Mõelge näiteks punkti või ostukorvi ideele. Ostukorv ei ole tõeväärtus ega loend. Need on teist tüüpi andmed. Seega saame kasutada klasse uute tüüpide määratlemiseks, et modelleerida reaalseid mõisteid.
Nüüd määratleme uue andmetüübi nimega punkt. Sellel uuel tüübil on meetodid, nagu me varem kontrollisime.
Teete seda järgmiselt:
Alustuseks määrame klassi märksõnaga “klass” ja kohe pärast seda anname oma klassile nime.
class Point
Vaadake nüüd, millist nimetamisviisi olen siin kasutanud. Olen siin esimese tähe suureks kirjutanud, seda me nimetame pascali nimetamise tavaks. See tava erineb sellest, mida kasutame muutujate ja funktsioonide nimetamiseks, mille puhul kasutame alati väiketähti ja eraldame mitu sõna alakriipsuga. Kuid klasside nimetamisel ei kasuta me mitme sõna eraldamiseks alakriipsu, vaid kirjutame iga sõna algustähe suurtähtedega.
Pärast meie klassi määratlemist kasutatakse koolonit, mis tähendab, et nüüd on plokk määratletud.
class Point:
def move (self):
Selles plokis saame defineerida kõik punktidesse kuuluvad funktsioonid või meetodid. Näiteks võime punkti liigutamiseks määratleda funktsiooni nimega “move”. Pange tähele, et niipea, kui sisestame avatud sulgu, lisab PyCharm siia automaatselt sõna "self". See on eriline märksõna ja ma tulen selle juurde varsti tagasi. Trükime terminali “move”.
print("move")
Määratleme veel ühe meetodi nagu “joonista” ja prindime selle terminali.
def draw(self):
print("draw")
Oleme oma "punkti" klassi määratlusega lõpetanud. Selle uue tüübi abil saame luua uusi objekte. Klass lihtsalt määratleb kavandi või malli objektide loomiseks, mis on sellel kavandil põhinevad tegelikud eksemplarid. Objekti loomiseks tippime välja oma klassi nime ja kutsume seda täpselt nagu funktsiooni. See loob uue objekti ja tagastab selle. Seejärel saame selle objekti muutujasse salvestada. Las ma näitan sulle:
Siin oleme määratlenud punkti1, mis on kolmemõõtmeline punkt. Näete seda, me saame terminali printida üksikud koordinaadid.
Selle punktiga saame kasutada kahte meetodit "joonistada" ja "liigutada".
Kokkuvõtteks kasutame klasse uute tüüpide määratlemiseks ja nendel tüüpidel võivad olla meetodid, mille määratleme klassi põhiosas. Klassidel võivad olla atribuudid, mida saame oma programmides kõikjal seadistada.
Konstruktorid
Seni oleme õppinud klasside abil uusi tüüpe looma. Nüüd on selle rakendamisega väike probleem. Me saame klasside abil luua punktobjekti ilma x- või y-koordinaadita ja see pole ideaalne. Las ma näitan sulle.
Loome punkti ja trükime selle enne x-koordinaadi määramist. Meie programmi käivitamine annab tulemuseks sellise atribuudivea:
See tähendab, et punktobjektil pole atribuuti nimega x. Nüüd on probleem selles, et on võimalik punktobjekt ilma x või y koordinaatideta. Sellel pole mõtet, sest alati, kui me räägime punktist, peame teadma, kus see punkt asub. Selle probleemi lahendamiseks kasutame konstruktorit. Konstruktor on funktsioon, mis kutsutakse välja objekti loomise ajal.
Siin on, kuidas me konstruktorit kasutame. Esmalt edastame x ja y koordinaatide väärtused ülaltoodud programmis.
point = Point(10, 20)
print(point.x)
Nüüd peame sellesse klassi lisama spetsiaalse meetodi, mida nimetatakse konstruktoriks. Selle süntaks on järgmine:
def __init__(self, x, y):
init
on lühend sõnast inicialiseeritud ja see on funktsioon või meetod, mis kutsutakse välja uue punktobjekti loomisel. X ja y lisatakse kohe pärast self
kahe lisaparameetri lisamiseks.
Pärast seda peaksime x ja y vastama läbitud väärtustele, st 10 ja 20
self.x = x
self.y = y
Me kasutame self
praegusele objektile viitamiseks ja seejärel määrame atribuudi x argumendile x, mis edastati funktsioonile “x”. Sel viisil kasutades init
meetodil saame oma objekte initsialiseerida. Seda meetodit nimetatakse konstruktoriks. Käivitame oma programmi.
Nüüd saame x ja y koordinaate hiljem muuta. Värskendame x koordinaati:
point = Point(10, 20)
point.x = 11
print(point.x)
Nüüd värskendatakse x-koordinaati väärtuseks 11.
Teostama
Siin on teile huvitav harjutus.
Ma tahan, et määratleksite uue tüübi nimega inimene. Nendel "Isik" objektidel peaks olema "name
" atribuut ja ka "talk()
”Meetod.
See on lihtne ülesanne ja see ei tohiks kesta kauem kui paar minutit.
Lahendus
Alustage klassi "Isik" määratlemisest järgmiselt:
class Person:
self.name = name
Konstruktori defineerime hiljem. Nüüd saame luua objekti "Isik". Nimetagem seda Johniks
john = Person("John Smith")
print(john.name)
john.talk()
Nüüd minge edasi koodi esimese osa juurde ja looge konstruktor.
def __init__(self, name):
Lõplik kood näeb välja selline:
Vormindatud stringe ja muid mõisteid saate kasutada ka koos klasside ja konstruktoritega.
Pärisosa
Pärand on veel üks mõiste, mis on seotud klassidega, mis võimaldavad teil koodi uuesti kasutada.
Mõelge sellele kooditükile.
class Dog:
def walk(self):
print("walk")
Oleme loonud klassi “Koer” “kõnni” meetodil. Selle meetodi puhul prindime lihtsalt terminali kõndimisteate. Oletame, et päris programmis on siin ühe rea asemel 10 rida koodi. Kui tulevikus on „kõnni” meetodi kasutamiseks vaja mõnda teist klassi, peame kogu seda koodi kordama. See pole ideaalne.
Programmeerimisel on meil põhimõte DRY, mis on lühend sõnadest ära korda ennast. Oletame, et millalgi tulevikus avastame probleemi oma kõndimismeetodiga ja kui oleme seda meetodit paljudes teistes kohtades kordanud või dubleerinud, peame tagasi tulema ja selle probleemi lahendama igas kohas, kus oleme seda dubleerinud. kood. Seetõttu ei tohiks me programmeerimisel midagi kaks korda määratleda.
Selle probleemi lahendamiseks on erinevaid lähenemisviise, kuid siin õpime seda, mis on algajatele lihtsam ja mida nimetatakse pärimiseks. Sel juhul loome teise klassi "imetaja" ja määratleme oma "kõnni" atribuudi selles klassis.
class Mammal:
def walk(self):
print("walk")
Pärast klassi “Imetaja” määratlemist saame atribuutide edastamiseks kasutada pärimist järgmiselt:
Nii koera- kui ka kassiklassid pärivad kõik oma vanemklassis määratletud klassimeetodid. Nüüd saame lisada selliseid koertele spetsiifilisi meetodeid:
class Dog:
def bark(self):
print("bark")
Tõmba otsad kokku!
See kõik puudutas klasse, konstruktoreid ja koodi taaskasutamist pärimiskontseptsioonidega klassides. Nüüd oleme oma sarja lõpusirgele jõudmas. Selleks ajaks peaksite suutma Pythonis toota häid, loetavaid ja ülevaatlikke koode.
Moodulite ja pakettide kontseptsiooni näeme järgmises loengus.
Jäta vastus