Kaundan[Itago][Ipakita]
Niini nga lecture, makakat-on kita mahitungod sa mga klase, mga konstruktor ug kabilin sa python.
Kini nga mga konsepto hinungdanon kaayo sa usa ka dako nga programa diin ang lainlaing mga lahi kinahanglan nga ipasabut.
mga klase
Ang mga klase hinungdanon sa pagprograma ug dili kini espesipiko sa python. Daghan pa mga sinultian nga programming pagsuporta sa ideya sa mga klase. Gigamit namon ang mga klase aron mahibal-an ang mga bag-ong tipo sa datos.
Hangtod karon, nahibal-an namon ang bahin sa sukaranan nga mga tipo sa datos sa Python sama sa mga numero, mga kuwerdas, ug mga boolean. Kini ang sukaranan o yano nga mga tipo sa datos sa Python. Nakakita usab kami usa ka magtiayon nga komplikado nga mga tipo sa datos sama sa mga lista ug mga diksyonaryo.
Bisan kung kini nga mga tipo labi ka mapuslanon, dili kini kanunay magamit sa pagmodelo sa komplikado nga mga konsepto. Pananglitan, hunahunaa ang ideya sa usa ka punto, o usa ka shopping cart. Ang shopping cart dili boolean o listahan. Kini usa ka lahi nga klase sa datos. Mao nga magamit namon ang mga klase aron mahibal-an ang mga bag-ong tipo aron mamodelo ang tinuod nga mga konsepto.
Karon, atong ipasabut ang usa ka bag-ong tipo sa datos nga gitawag nga punto. Kini nga bag-ong tipo adunay mga pamaagi sama sa among gisusi kaniadto.
Mao kini ang imong buhaton:
Nagsugod kami pinaagi sa pagtino sa usa ka klase pinaagi sa paggamit sa keyword nga "klase" ug pagkahuman hatagan namon ang among klase og ngalan.
class Point
Karon, tan-awa ang kombensiyon sa pagngalan nga akong gigamit dinhi. Gi-capitalize nako ang unang letra dinhi, mao ni ang gitawag nato og pascal name convention. Kini nga kombensiyon lahi sa usa nga among gigamit sa pagngalan sa among mga variable ug function diin kanunay namong gigamit ang gagmay nga mga letra ug gilain ang daghang mga pulong gamit ang underscore. Apan kung nagngalan sa mga klase, wala kami mogamit usa ka underscore aron mabulag ang daghang mga pulong sa baylo, among gi-capitalize ang una nga letra sa matag pulong.
Human sa pagtino sa among klase, gigamit ang usa ka colon nga nagpasabot nga karon usa ka bloke ang gihubit.
class Point:
def move (self):
Niini nga bloke, mahimo natong ipasabut ang tanan nga mga gimbuhaton o pamaagi nga nahisakop sa mga punto. Pananglitan, mahimo natong ipasabut ang usa ka function nga gitawag og "move" alang sa paglihok sa usa ka punto. Timan-i nga sa diha nga kami nag-type sa bukas nga parenthesis, ang PyCharm awtomatikong idugang ang "kaugalingon" dinhi. Kini usa ka espesyal nga keyword ug tugoti ako nga mobalik niini sa dili madugay. Atong i-print ang "move" sa terminal.
print("move")
Atong ipasabot ang laing pamaagi sama sa “draw” ug i-print kini sa terminal.
def draw(self):
print("draw")
Nahuman na namo ang kahulugan sa among klase nga "punto". Uban niining bag-ong tipo, makahimo kita og bag-ong mga butang. Ang usa ka klase yanong naghubit sa blueprint o template alang sa pagmugna og mga butang nga mao ang aktuwal nga mga higayon base sa maong blueprint. Aron makahimo og butang, atong i-type ang ngalan sa atong klase ug dayon tawgon kini sama sa usa ka function. Naghimo kini og bag-ong butang ug dayon ibalik kini. Dayon mahimo natong tipigan kana nga butang sa usa ka variable. Tugoti ko nga ipakita kanimo:
Dinhi atong gihubit ang usa ka "punto1" nga usa ka tulo-ka-dimensyon nga punto. Makita nimo kana, mahimo namon nga i-print ang indibidwal nga mga coordinate sa terminal.
Mahimo natong gamiton ang duha ka pamaagi nga "pagdrowing" ug "paglihok" niini nga punto.
Mao nga sa pag-recap, gigamit namon ang mga klase aron mahibal-an ang mga bag-ong tipo ug kini nga mga tipo mahimong adunay mga pamaagi nga among gipasabut sa lawas sa klase. Ang mga klase mahimong adunay mga hiyas nga mahimo natong itakda bisan asa sa atong mga programa.
Mga magtutukod
Hangtod karon, nahibal-an namon kung giunsa paghimo ang mga bag-ong tipo gamit ang mga klase. Karon adunay gamay nga problema sa kini nga pagpatuman. Makahimo kita og usa ka punto nga butang nga walay x o y coordinate gamit ang mga klase ug kana dili maayo. Papakita ko nimo.
Maghimo kita ug punto ug i-print kini sa dili pa nato ibutang ang x coordinate. Ang pagpadagan sa among programa nagresulta sa usa ka sayup nga kinaiya sama niini:
Kini nagpasabot nga ang punto nga butang walay hiyas nga gitawag ug x. Karon ang problema mao nga posible nga adunay usa ka punto nga butang nga walay x o y coordinates. Dili kini makatarunganon tungod kay kung maghisgot kita bahin sa usa ka punto, kinahanglan naton mahibal-an kung diin nahimutang ang punto. Aron masulbad kini nga problema, naggamit kami usa ka konstruktor. Ang usa ka constructor usa ka function nga gitawag sa panahon sa paghimo sa usa ka butang.
Ania kung giunsa namon gigamit ang usa ka konstruktor. Una, atong ipasa ang x ug y coordinates nga mga kantidad sa programa sa ibabaw.
point = Point(10, 20)
print(point.x)
Karon, kinahanglan natong idugang ang usa ka espesyal nga pamaagi niini nga klase nga gitawag og constructor. Ang syntax niini sama niini:
def __init__(self, x, y):
init
mubo alang sa inisyal, ug kini ang function o ang pamaagi nga gitawag kung ang usa ka bag-ong punto nga butang gihimo. Ang x ug y gidugang dayon pagkahuman self
aron makadugang duha ka dugang nga mga parameter.
Pagkahuman niana, kinahanglan naton nga mapa ang x ug y sa gipasa nga mga kantidad ie 10 ug 20
self.x = x
self.y = y
Gigamit nato ang self
sa pagtumong sa kasamtangan nga butang ug unya atong ibutang ang x attribute sa x argument nga gipasa sa function nga "x". Niining paagiha, ang paggamit init
paagi, mahimo naton ma-initialize ang atong mga butang. Kini nga pamaagi gitawag nga constructor. Atong sugdan ang atong programa.
Karon, mahimo natong usbon ang x ug y coordinates sa ulahi. Atong i-update ang x coordinate:
point = Point(10, 20)
point.x = 11
print(point.x)
Karon, ang x coordinate gi-update sa kantidad nga 11.
ehersisyo
Ania ang usa ka makapaikag nga ehersisyo alang kanimo.
Gusto ko nga imong ipasabut ang usa ka bag-ong tipo nga gitawag ug tawo. Kini nga mga butang nga "Tawo" kinahanglan adunay "name
"atribusyon ingon man usa ka"talk()
”Pamaagi.
Kini usa ka yano nga buluhaton ug kinahanglan nga dili molapas sa pipila ka minuto.
solusyon
Pagsugod sa paghubit sa klase nga "Tawo" sama niini:
class Person:
self.name = name
Atong ipasabut ang constructor sa ulahi. Karon, makahimo kita sa butang nga "Tawo". Tawgon nato ni nga John
john = Person("John Smith")
print(john.name)
john.talk()
Karon, adto sa unang bahin sa code ug paghimo og constructor.
def __init__(self, name):
Ang katapusan nga code mahimong sama niini:
Mahimo usab nimo gamiton ang gi-format nga mga string ug uban pang mga konsepto kauban ang mga klase ug mga konstruktor.
Panulondon
Ang kabilin maoy laing konsepto nga nalangkit sa mga klase nga magtugot kanimo sa paggamit pag-usab sa usa ka code.
Hunahunaa kini nga piraso sa code.
class Dog:
def walk(self):
print("walk")
Naghimo kami usa ka klase nga "Iro" nga adunay "paglakaw" nga pamaagi. Niini nga pamaagi, gi-imprinta lang namo ang mensahe sa paglakaw sa terminal. Ingnon ta, sa usa ka tinuod nga programa, Adunay 10 ka linya sa code imbes nga usa lang ka linya dinhi. Sa umaabot, kung gikinahanglan ang laing klase aron adunay "paglakaw" nga pamaagi, kinahanglan natong balikon ang tanan nga code. Dili kini maayo.
Sa pagprograma, naa tay prinsipyo nga gitawag ug DRY nga mubu sa ayaw pag-usab sa imong kaugalingon. Ingnon ta sa umaabot nga panahon, makadiskubre kita og problema sa atong “paglakaw” nga pamaagi ug kung atong gisubli o gi-duplicate kini nga pamaagi sa daghang ubang mga dapit, kinahanglan natong balikan ug ayuhon kana nga problema sa matag dapit nga atong gi-duplicate niini. Code. Mao kana ang hinungdan ngano nga sa pagprograma dili kinahanglan nga ipasabut ang usa ka butang nga doble.
Adunay lain-laing mga pamaagi aron masulbad kini nga problema apan dinhi atong tun-an ang usa nga mas sayon alang sa mga nagsugod ug kini gitawag nga kabilin. Niini nga kaso, maghimo kita og laing klase nga "mammal" ug ipasabut ang atong "paglakaw" nga hiyas sa kana nga klase.
class Mammal:
def walk(self):
print("walk")
Human sa paghubit sa among klase nga "Mammal" mahimo namong gamiton ang kabilin aron ipasa ang mga hiyas nga sama niini:
Ang mga klase sa iro ug iring nagpanunod sa tanan nga mga pamaagi sa klase nga gihubit sa ilang ginikanan nga klase. Karon, makadugang kami mga pamaagi nga espesipiko sa mga iro nga sama niini:
class Dog:
def bark(self):
print("bark")
Pagputos!
Kini ang tanan bahin sa mga klase, tigtukod ug paggamit pag-usab sa code sa mga klase nga adunay mga konsepto sa kabilin. Karon hapit na mahuman ang among serye. Niini nga punto, kinahanglan ka makahimo og maayo, mabasa ug mubo nga mga code sa Python.
Atong makita ang konsepto sa modules ug packages sa sunod nga lecture.
Leave sa usa ka Reply