Í þessum fyrirlestri munum við læra um flokka, smiða og erfðir í python.
Þessi hugtök eru mjög mikilvæg í stóru forriti þar sem þarf að skilgreina mismunandi gerðir.
Flokkar
Tímar eru nauðsynlegir í forritun og þeir eru ekki sérstakir fyrir python. Margt annað forritunarmál styðja hugmyndina um flokka. Við notum flokka til að skilgreina nýjar gagnategundir.
Hingað til höfum við lært um helstu gagnategundirnar í Python eins og tölur, strengir og booleans. Þetta eru helstu eða einföldu gagnagerðirnar í Python. Við höfum líka séð nokkrar flóknar gagnagerðir eins og listar og orðabækur.
Þó að þessar tegundir séu mjög gagnlegar er ekki alltaf hægt að nota þær til að búa til flóknar hugmyndir. Hugsaðu til dæmis um hugmyndina um punkt eða innkaupakörfu. Innkaupakarfa er ekki boolean eða listi. Það eru annars konar gögn. Þannig að við getum notað flokka til að skilgreina nýjar tegundir til að móta raunveruleg hugtök.
Nú skulum við skilgreina nýja gagnategund sem kallast punktur. Þessi nýja tegund mun hafa aðferðir eins og við skoðuðum áður.
Svona muntu gera það:
Við byrjum á því að skilgreina bekk með því að nota „class“ lykilorðið og rétt eftir það gefum við bekknum okkar nafn.
class Point
Skoðaðu nú nafngiftina sem ég hef notað hér. Ég hef skrifað fyrsta stafinn með hástöfum hér, þetta er það sem við köllum Pascal nafnastefnu. Þessi venja er frábrugðin þeirri sem við notum til að nefna breytur okkar og aðgerðir sem við notum alltaf lágstafi fyrir og aðskilin mörg orð með undirstrik. En þegar við nefnum flokka notum við ekki undirstrik til að aðgreina mörg orð í staðinn, við skrifum fyrsta staf hvers orðs með hástöfum.
Eftir að flokkurinn okkar hefur verið skilgreindur er notaður tvípunktur sem þýðir að nú er kubbur skilgreindur.
class Point:
def move (self):
Í þessum blokk getum við skilgreint allar aðgerðir eða aðferðir sem tilheyra punktum. Til dæmis getum við skilgreint fall sem kallast „hreyfa“ til að færa punkt. Athugaðu að um leið og við sláum inn opinn sviga bætir PyCharm sjálfkrafa við „sjálf“ hér. Þetta er sérstakt lykilorð og ég ætla að koma aftur að þessu fljótlega. Við skulum prenta „hreyfa“ á flugstöðinni.
print("move")
Við skulum skilgreina aðra aðferð eins og „teikna“ og prenta hana á flugstöðina.
def draw(self):
print("draw")
Við erum búin með skilgreininguna á „punkta“ bekknum okkar. Með þessari nýju gerð getum við búið til nýja hluti. Bekkur skilgreinir einfaldlega teikninguna eða sniðmátið til að búa til hluti sem eru raunveruleg tilvik byggð á þeirri teikningu. Til að búa til hlut skrifum við út nafn bekkjarins okkar og köllum það síðan alveg eins og fall. Þetta býr til nýjan hlut og skilar honum síðan. Þá getum við geymt þann hlut í breytu. Leyfðu mér að sýna þér:
Hér höfum við skilgreint „punkt1“ sem er þrívíður punktur. Þú getur séð það, við getum prentað einstök hnit á flugstöðinni.
Við getum notað aðferðirnar tvær „teikna“ og „hreyfa“ með þessum punkti.
Svo til að rifja upp þá notum við flokka til að skilgreina nýjar tegundir og þessar tegundir geta haft aðferðir sem við skilgreinum í meginmáli flokksins. Flokkar geta haft eiginleika sem við getum stillt hvar sem er í forritunum okkar.
Smiðir
Hingað til höfum við lært hvernig á að búa til nýjar tegundir með því að nota flokka. Nú er smá vandamál með þessa framkvæmd. Við getum búið til punkthlut án x eða y hnit með því að nota flokka og það er ekki tilvalið. Leyfðu mér að sýna þér.
Búum til punkt og prentum hann áður en við setjum x hnitið. Að keyra forritið okkar leiðir til eiginleikavillu eins og þessa:
Það þýðir að punkthluturinn hefur engan eiginleika sem kallast x. Nú er vandamálið að það er hægt að hafa punkthlut án x eða y hnita. Þetta er ekki skynsamlegt þar sem alltaf þegar við tölum um punkt þurfum við að vita hvar sá punktur er staðsettur. Til að leysa þetta vandamál notum við byggingaraðila. Smiður er aðgerð sem er kölluð þegar hlutur er búinn til.
Hér er hvernig við notum byggingaraðila. Fyrst skulum við senda x og y hnit gildin í ofangreindu forriti.
point = Point(10, 20)
print(point.x)
Nú þurfum við að bæta við sérstakri aðferð í þessum flokki sem kallast smiður. Setningafræði þess er svona:
def __init__(self, x, y):
init
er stytting á initialized og þetta er fallið eða aðferðin sem er kölluð þegar nýr punkthlutur er búinn til. X og y bætast við rétt á eftir self
til að bæta við tveimur aukabreytum.
Eftir það ættum við að kortleggja x og y við samþykkt gildi þ.e. 10 og 20
self.x = x
self.y = y
Við notum self
til að vísa til núverandi hluts og síðan setjum við x eigindina á x viðfangið sem er sent til fallsins „x“. Á þennan hátt, með því að nota init
aðferð, getum við frumstillt hlutina okkar. Þessi aðferð er nefnd smiður. Við skulum keyra prógrammið okkar.
Nú getum við breytt x og y hnitunum síðar. Uppfærum x hnit:
point = Point(10, 20)
point.x = 11
print(point.x)
Nú er x hnitið uppfært í gildið 11.
Dæmi
Hér er áhugaverð æfing fyrir þig.
Ég vil að þú skilgreinir nýja tegund sem kallast manneskja. Þessir „Persónu“ hlutir ættu að hafa „name
" eiginleiki sem og "talk()
”Aðferð.
Þetta er einfalt verkefni og ætti ekki að taka meira en nokkrar mínútur.
lausn
Byrjaðu á því að skilgreina flokkinn „Persónu“ svona:
class Person:
self.name = name
Við munum skilgreina smiðinn síðar. Nú getum við búið til „Persónu“ hlutinn. Við skulum kalla það Jón
john = Person("John Smith")
print(john.name)
john.talk()
Farðu nú í fyrsta hluta kóðans og búðu til byggingaraðila.
def __init__(self, name):
Lokakóðinn mun líta svona út:
Þú getur líka notað sniðna strengi og önnur hugtök í tengslum við flokka og smíði.
Erfðir
Erfðir er annað hugtak sem tengist flokkum sem gerir þér kleift að endurnýta kóða.
Íhugaðu þennan kóða.
class Dog:
def walk(self):
print("walk")
Við höfum búið til flokk "Hundur" með "göngu" aðferð. Með þessari aðferð erum við einfaldlega að prenta gönguskilaboðin á flugstöðinni. Segjum að í alvöru forriti eru 10 línur af kóða í stað þess að vera aðeins ein lína hér. Í framtíðinni, ef þörf er á öðrum flokki til að hafa „gang“ aðferðina, verðum við að endurtaka allan þann kóða. Þetta er ekki tilvalið.
Í forritun höfum við meginreglu sem kallast DRY sem er stytting á ekki endurtaka sjálfan þig. Segjum að einhvern tíma í framtíðinni uppgötvum við vandamál með „gönguaðferð“ okkar og ef við höfum endurtekið eða afritað þessa aðferð á mörgum öðrum stöðum, verðum við að koma aftur og laga það vandamál á hverjum einasta stað sem við höfum afritað þetta. kóða. Svo þess vegna ættum við ekki að skilgreina eitthvað tvisvar í forritun.
Það eru mismunandi aðferðir til að ráða bót á þessu vandamáli en hér ætlum við að læra þá sem er auðveldari fyrir byrjendur og kallast erfðir. Í þessu tilviki munum við búa til annan bekkjar „spendýr“ og skilgreina „göngu“ eiginleika okkar í þeim bekk.
class Mammal:
def walk(self):
print("walk")
Eftir að hafa skilgreint „Spendýr“ flokkinn okkar getum við notað arfleifð til að senda eiginleikana svona:
Bæði hunda- og kattaflokkurinn erfa allar bekkjaraðferðirnar sem skilgreindar eru í foreldraflokknum. Nú getum við bætt við aðferðum sem eru sérstaklega fyrir hunda eins og þessa:
class Dog:
def bark(self):
print("bark")
Klára!
Þetta snerist allt um flokkana, smíðina og endurnotkun kóðans í flokkum með erfðahugtök. Núna erum við að nálgast lok seríunnar okkar. Á þessum tímapunkti ættir þú að geta framleitt góða, læsilega og hnitmiðaða kóða í Python.
Við munum sjá hugmyndina um einingar og pakka í næsta fyrirlestri.
Skildu eftir skilaboð