Katika muhadhara huu, tutajifunza juu ya madarasa, wajenzi na urithi katika python.
Dhana hizi ni muhimu sana katika programu kubwa ambapo aina tofauti zinahitajika kufafanuliwa.
madarasa
Madarasa ni muhimu katika upangaji na sio maalum kwa chatu. Nyingine nyingi lugha za programu kuunga mkono dhana ya madarasa. Tunatumia madarasa kufafanua aina mpya za data.
Kufikia sasa, tumejifunza juu ya aina za msingi za data katika Python kama nambari, kamba, na booleans. Hizi ndizo aina za msingi au rahisi za data katika Python. Tumeona pia aina kadhaa za data changamano kama orodha na kamusi.
Ingawa aina hizi ni muhimu sana, haziwezi kutumika kila wakati kuiga dhana ngumu. Kwa mfano, fikiria juu ya wazo la uhakika, au gari la ununuzi. Mkokoteni wa ununuzi sio boolean au orodha. Ni aina tofauti ya data. Kwa hivyo tunaweza kutumia madarasa kufafanua aina mpya ili kuiga dhana halisi.
Sasa, hebu tufafanue aina mpya ya data inayoitwa point. Aina hii mpya itakuwa na mbinu kama tulivyoangalia hapo awali.
Hivi ndivyo utakavyofanya:
Tunaanza kwa kufafanua darasa kwa kutumia neno kuu la "darasa" na baada ya hapo tunawapa darasa letu jina.
class Point
Sasa, angalia mkusanyiko wa majina ambao nimetumia hapa. Nimeandika herufi ya kwanza hapa, hii ndiyo tunaiita mkataba wa majina ya pasaka. Mkataba huu ni tofauti na ule tunaotumia kutaja vigeu vyetu na vitendakazi ambapo sisi hutumia herufi ndogo kila wakati na kutenganisha maneno mengi kwa kutumia alama ya chini. Lakini tunapotaja madarasa, hatutumii alama chini ili kutenganisha maneno mengi badala yake, tunaandika herufi kubwa ya kwanza ya kila neno.
Baada ya kufafanua darasa letu, koloni hutumiwa ambayo inamaanisha kuwa sasa kizuizi kinafafanuliwa.
class Point:
def move (self):
Katika kizuizi hiki, tunaweza kufafanua kazi zote au mbinu ambazo ni za pointi. Kwa mfano, tunaweza kufafanua chaguo za kukokotoa inayoitwa "sogeza" kwa ajili ya kusogeza uhakika. Kumbuka kwamba mara tu tunapoandika mabano wazi, PyCharm huongeza kiotomatiki "ubinafsi" hapa. Hili ni neno muhimu na niruhusu nirudi kwa hili hivi karibuni. Wacha tuchapishe "sogeza" kwenye terminal.
print("move")
Wacha tufafanue njia nyingine kama "chora" na uchapishe kwenye terminal.
def draw(self):
print("draw")
Tumemaliza na ufafanuzi wa darasa letu la "point". Kwa aina hii mpya, tunaweza kuunda vitu vipya. Darasa hufafanua kwa urahisi mchoro au kiolezo cha kuunda vitu ambavyo ni visa halisi kulingana na mchoro huo. Ili kuunda kitu, tunaandika jina la darasa letu na kisha kuiita kama chaguo la kukokotoa. Hii inaunda kitu kipya na kisha kuirejesha. Kisha tunaweza kuhifadhi kitu hicho katika muundo tofauti. Acha nikuonyeshe:
Hapa tumefafanua "point1" ambayo ni hatua tatu-dimensional. Unaweza kuona kwamba, tunaweza kuchapisha kuratibu za mtu binafsi kwenye terminal.
Tunaweza kutumia njia mbili "chora" na "sogeza" na hatua hii.
Kwa hivyo ili kurejea, tunatumia madarasa kufafanua aina mpya na aina hizi zinaweza kuwa na mbinu ambazo tunafafanua katika kundi la darasa. Madarasa yanaweza kuwa na sifa ambazo tunaweza kuweka popote katika programu zetu.
Wajenzi
Hadi sasa, tumejifunza jinsi ya kuunda aina mpya kwa kutumia madarasa. Sasa kuna shida ndogo na utekelezaji huu. Tunaweza kuunda kitu cha uhakika bila x au y kuratibu kwa kutumia madarasa na hiyo sio bora. Ngoja nikuonyeshe.
Wacha tuunde nukta na tuichapishe kabla ya kuweka uratibu wa x. Kuendesha programu yetu husababisha hitilafu ya sifa kama hii:
Inamaanisha kuwa kitu cha uhakika hakina sifa inayoitwa x. Sasa shida ni kwamba inawezekana kuwa na kitu cha uhakika bila x au y kuratibu. Hili halina maana kwani kila tunapozungumza kuhusu jambo fulani, tunahitaji kujua mahali ambapo hatua hiyo iko. Ili kutatua tatizo hili, tunatumia mjenzi. Mjenzi ni kazi ambayo huitwa wakati wa kuunda kitu.
Hivi ndivyo tunavyotumia mjenzi. Kwanza, hebu tupitishe maadili ya x na y ya kuratibu katika programu iliyo hapo juu.
point = Point(10, 20)
print(point.x)
Sasa, tunahitaji kuongeza njia maalum katika darasa hili inayoitwa mjenzi. Syntax yake ni kama hii:
def __init__(self, x, y):
init
ni fupi kwa kuanzishwa, na hii ndiyo kazi au njia ambayo huitwa wakati kitu kipya cha uhakika kinaundwa. X na y huongezwa mara baada ya self
kuongeza vigezo viwili vya ziada.
Baada ya hapo, tunapaswa kupanga x na y kwa maadili yaliyopitishwa yaani 10 na 20
self.x = x
self.y = y
Sisi kutumia self
kurejelea kitu cha sasa na kisha tunaweka sifa ya x kwa hoja ya x iliyopitishwa kwa kazi "x". Kwa njia hii, kwa kutumia init
njia, tunaweza kuanzisha vitu vyetu. Njia hii inajulikana kama mjenzi. Wacha tuendeshe programu yetu.
Sasa, tunaweza kubadilisha viwianishi vya x na y baadaye. Wacha tusasishe x kuratibu:
point = Point(10, 20)
point.x = 11
print(point.x)
Sasa, uratibu wa x umesasishwa hadi thamani 11.
Zoezi
Hapa kuna mazoezi ya kuvutia kwako.
Nataka ufafanue aina mpya inayoitwa mtu. Vitu hivi vya "Mtu" vinapaswa kuwa na "name
” sifa pamoja na “talk()
" njia.
Ni kazi rahisi na haipaswi kuchukua zaidi ya dakika kadhaa.
Suluhisho
Anza kwa kufafanua darasa "Mtu" kama hii:
class Person:
self.name = name
Tutafafanua mjenzi baadaye. Sasa, tunaweza kuunda kitu cha "Mtu". Hebu tuite John
john = Person("John Smith")
print(john.name)
john.talk()
Sasa, nenda kwenye sehemu ya kwanza ya nambari na unda mjenzi.
def __init__(self, name):
Nambari ya mwisho itaonekana kama hii:
Unaweza pia kutumia kamba zilizoumbizwa na dhana zingine kwa kushirikiana na madarasa na wajenzi.
Urithi
Urithi ni dhana nyingine inayohusishwa na madarasa ambayo hukuruhusu kutumia tena msimbo.
Fikiria kipande hiki cha kanuni.
class Dog:
def walk(self):
print("walk")
Tumeunda darasa "Mbwa" na njia ya "kutembea". Kwa njia hii, tunachapisha tu ujumbe wa kutembea kwenye terminal. Hebu tuseme, katika mpango halisi, Kuna mistari 10 ya kanuni badala ya mstari mmoja tu hapa. Katika siku zijazo, ikiwa darasa lingine linahitajika kuwa na njia ya "kutembea", tutalazimika kurudia msimbo huo wote. Hii sio bora.
Katika upangaji programu, tuna kanuni inayoitwa DRY ambayo ni fupi kwa hiyo usijirudie. Wacha tuseme wakati fulani katika siku zijazo, tutagundua tatizo na njia yetu ya "kutembea" na ikiwa tumerudia au kunakili njia hii katika maeneo mengine mengi, itabidi turudi na kurekebisha tatizo hilo katika kila sehemu ambayo tumenakili hii. kanuni. Kwa hivyo ndiyo sababu katika upangaji hatupaswi kufafanua kitu mara mbili.
Kuna njia tofauti za kutatua tatizo hili lakini hapa tutajifunza moja ambayo ni rahisi kwa wanaoanza na inaitwa urithi. Katika kesi hii, tutaunda darasa lingine la "mamalia" na kufafanua sifa yetu ya "kutembea" katika darasa hilo.
class Mammal:
def walk(self):
print("walk")
Baada ya kufafanua darasa letu la "Mamalia" tunaweza kutumia urithi kupitisha sifa kama hii:
Madarasa ya mbwa na paka yanarithi njia zote za darasa zilizofafanuliwa katika darasa la wazazi wao. Sasa, tunaweza kuongeza mbinu maalum kwa mbwa kama hii:
class Dog:
def bark(self):
print("bark")
Maliza!
Hii yote ilikuwa juu ya madarasa, wajenzi na kutumia tena nambari katika madarasa na dhana za urithi. Sasa tunakaribia mwisho wa mfululizo wetu. Kufikia hatua hii, unapaswa kuwa na uwezo wa kutoa nambari nzuri, zinazosomeka na fupi katika Python.
Tutaona dhana ya moduli na vifurushi katika muhadhara unaofuata.
Acha Reply