Përmbajtje[Fshih][Shfaqje]
Në këtë leksion do të mësojmë për klasat, konstruktorët dhe trashëgiminë në python.
Këto koncepte janë vërtet të rëndësishme në një program të madh ku nevojiten lloje të ndryshme për t'u përcaktuar.
Klasat
Klasat janë thelbësore në programim dhe ato nuk janë specifike për python. Shume te tjere gjuhë programimi mbështesin nocionin e klasave. Ne përdorim klasa për të përcaktuar lloje të reja të dhënash.
Deri më tani, ne kemi mësuar për llojet bazë të të dhënave në Python si numrat, vargjet dhe booleans. Këto janë llojet bazë ose të thjeshta të të dhënave në Python. Ne kemi parë gjithashtu disa lloje komplekse të të dhënave si listat dhe fjalorët.
Ndërsa këto lloje janë jashtëzakonisht të dobishme, ato nuk mund të përdoren gjithmonë për të modeluar koncepte komplekse. Për shembull, mendoni për idenë e një pike ose një karroce blerjeje. Një karrocë blerjesh nuk është një boolean ose një listë. Është një lloj tjetër të dhënash. Pra, ne mund të përdorim klasa për të përcaktuar lloje të reja për të modeluar koncepte reale.
Tani, le të përcaktojmë një lloj të ri të dhënash të quajtur pikë. Ky lloj i ri do të ketë metoda siç kemi kontrolluar më parë.
Kështu do ta bëni:
Ne fillojmë duke përcaktuar një klasë duke përdorur fjalën kyçe "class" dhe menjëherë pas kësaj i japim një emër klasës sonë.
class Point
Tani, shikoni konventën e emërtimit që kam përdorur këtu. Unë e kam shkruar shkronjën e parë këtu, kjo është ajo që ne e quajmë një konventë emërtimi paskal. Kjo konventë është e ndryshme nga ajo që përdorim për emërtimin e variablave dhe funksioneve tona, për të cilat ne përdorim gjithmonë shkronja të vogla dhe ndajmë fjalë të shumta duke përdorur një nënvizim. Por kur emërtojmë klasa, ne nuk përdorim një nënvizim për të ndarë disa fjalë në vend të kësaj, ne shkrojmë shkronjën e parë të çdo fjale.
Pas përcaktimit të klasës sonë, përdoret një dy pika që do të thotë se tani është përcaktuar një bllok.
class Point:
def move (self):
Në këtë bllok, ne mund të përcaktojmë të gjitha funksionet ose metodat që u përkasin pikave. Për shembull, ne mund të përcaktojmë një funksion të quajtur "lëvizje" për lëvizjen e një pike. Vini re se sapo shtypim kllapa të hapura, PyCharm automatikisht shton "veten" këtu. Kjo është një fjalë kyçe e veçantë dhe më lejoni t'i kthehem kësaj së shpejti. Le të shtypim "lëvizje" në terminal.
print("move")
Le të përcaktojmë një metodë tjetër si "vizatim" dhe ta printojmë në terminal.
def draw(self):
print("draw")
Ne kemi përfunduar me përkufizimin e klasës sonë "pikë". Me këtë lloj të ri, ne mund të krijojmë objekte të reja. Një klasë thjesht përcakton planin ose shabllonin për krijimin e objekteve që janë rastet aktuale të bazuara në atë plan. Për të krijuar një objekt, ne shtypim emrin e klasës sonë dhe më pas e quajmë atë njësoj si një funksion. Kjo krijon një objekt të ri dhe më pas e kthen atë. Atëherë mund ta ruajmë atë objekt në një ndryshore. Më lër të të tregoj:
Këtu kemi përcaktuar një "pikë 1" e cila është një pikë tredimensionale. Ju mund ta shihni këtë, ne mund të printojmë koordinata individuale në terminal.
Ne mund të përdorim dy metodat "vizato" dhe "lëviz" me këtë pikë.
Pra, për të përmbledhur, ne përdorim klasa për të përcaktuar lloje të reja dhe këto lloje mund të kenë metoda që ne i përcaktojmë në trupin e klasës. Klasat mund të kenë atribute që ne mund t'i vendosim kudo në programet tona.
Konstruktorët
Deri më tani, ne kemi mësuar se si të krijojmë lloje të reja duke përdorur klasa. Tani ka një problem të vogël me këtë zbatim. Ne mund të krijojmë një objekt me pikë pa një koordinatë x ose y duke përdorur klasa dhe kjo nuk është ideale. Më lër të të tregoj.
Le të krijojmë një pikë dhe ta printojmë para se të vendosim koordinatën x. Ekzekutimi i programit tonë rezulton në një gabim atributi si ky:
Do të thotë që objekti pikësor nuk ka asnjë atribut të quajtur x. Tani problemi është se është e mundur të kemi një objekt pikë pa koordinata x ose y. Kjo nuk ka kuptim pasi sa herë që flasim për një pikë, duhet të dimë se ku ndodhet ajo pikë. Për të zgjidhur këtë problem, ne përdorim një konstruktor. Një konstruktor është një funksion që thirret në momentin e krijimit të një objekti.
Ja se si ne përdorim një konstruktor. Së pari, le të kalojmë vlerat e koordinatave x dhe y në programin e mësipërm.
point = Point(10, 20)
print(point.x)
Tani, ne duhet të shtojmë një metodë të veçantë në këtë klasë të quajtur një konstruktor. Sintaksa e tij është si kjo:
def __init__(self, x, y):
init
është e shkurtër për inicializuar, dhe ky është funksioni ose metoda që thirret kur krijohet një objekt i ri pikë. X dhe y shtohen menjëherë pas self
për të shtuar dy parametra shtesë.
Pas kësaj, ne duhet të vendosim x dhe y në vlerat e kaluara, dmth. 10 dhe 20
self.x = x
self.y = y
Ne përdorim self
t'i referohemi objektit aktual dhe më pas vendosim atributin x në argumentin x të kaluar në funksionin "x". Në këtë mënyrë, duke përdorur init
metodë, ne mund të inicializojmë objektet tona. Kjo metodë quhet konstruktor. Le të ekzekutojmë programin tonë.
Tani, ne mund të ndryshojmë koordinatat x dhe y më vonë. Le të përditësojmë koordinatat x:
point = Point(10, 20)
point.x = 11
print(point.x)
Tani, koordinata x është përditësuar në vlerën 11.
Stërvitje
Këtu është një ushtrim interesant për ju.
Unë dua që ju të përcaktoni një lloj të ri të quajtur person. Këto objekte "Personi" duhet të kenë një "name
"atribut si dhe një "talk()
”Metoda.
Është një detyrë e thjeshtë dhe nuk duhet të zgjasë më shumë se disa minuta.
Zgjidhje
Filloni me përcaktimin e klasës "Person" si kjo:
class Person:
self.name = name
Më vonë do ta përcaktojmë konstruktorin. Tani, ne mund të krijojmë objektin "Person". Le ta quajmë Gjon
john = Person("John Smith")
print(john.name)
john.talk()
Tani, shkoni te pjesa e parë e kodit dhe krijoni një konstruktor.
def __init__(self, name):
Kodi përfundimtar do të duket si ky:
Ju gjithashtu mund të përdorni vargje të formatuara dhe koncepte të tjera në lidhje me klasat dhe konstruktorët.
Trashëgim
Trashëgimia është një koncept tjetër i lidhur me klasat që ju lejojnë të ripërdorni një kod.
Konsideroni këtë pjesë të kodit.
class Dog:
def walk(self):
print("walk")
Ne kemi krijuar një klasë "Qen" me metodën "shëtitje". Në këtë metodë, ne thjesht po shtypim mesazhin e ecjes në terminal. Le të themi, në një program real, ka 10 rreshta kodi në vend të vetëm një rreshti këtu. Në të ardhmen, nëse nevojitet një klasë tjetër për të patur metodën “walk”, ne do të duhet të përsërisim të gjithë atë kod. Kjo nuk është ideale.
Në programim, ne kemi një parim të quajtur DRY që është shkurtim për mos u përsërit. Le të themi se dikur në të ardhmen, ne zbulojmë një problem me metodën tonë të "shëtitjes" dhe nëse e kemi përsëritur ose dublikuar këtë metodë në shumë vende të tjera, do të duhet të kthehemi dhe ta rregullojmë atë problem në çdo vend që e kemi dubluar këtë. kodi. Pra, kjo është arsyeja pse në programim nuk duhet të përcaktojmë diçka dy herë.
Ka mënyra të ndryshme për të zgjidhur këtë problem, por këtu do të mësojmë atë që është më e lehtë për fillestarët dhe quhet trashëgimi. Në këtë rast, ne do të krijojmë një klasë tjetër "gjitar" dhe do të përcaktojmë atributin tonë "ecje" në atë klasë.
class Mammal:
def walk(self):
print("walk")
Pas përcaktimit të klasës sonë "Mammal", ne mund të përdorim trashëgiminë për të kaluar atributet si kjo:
Të dy klasat e qenve dhe të maceve janë duke trashëguar të gjitha metodat e klasës të përcaktuara në klasën e tyre prind. Tani, ne mund të shtojmë metoda specifike për qentë si kjo:
class Dog:
def bark(self):
print("bark")
Përfundoje!
Gjithçka kishte të bënte me klasat, konstruktorët dhe ripërdorimin e kodit në klasa me koncepte të trashëgimisë. Tani jemi pranë fundit të serialit tonë. Deri në këtë pikë, ju duhet të jeni në gjendje të prodhoni kode të mira, të lexueshme dhe koncize në Python.
Konceptin e moduleve dhe paketave do ta shohim në leksionin e ardhshëm.
Lini një Përgjigju