Werrej[Aħbi][Uri]
F'din il-lecture, se nitgħallmu dwar il-klassijiet, il-kostrutturi u l-wirt f'python.
Dawn il-kunċetti huma tassew importanti fi programm kbir fejn hemm bżonn li jiġu definiti tipi differenti.
Klassijiet
Il-klassijiet huma essenzjali fl-ipprogrammar u mhumiex speċifiċi għal python. Ħafna oħrajn Lingwi ta ’programmazzjoni jappoġġjaw il-kunċett tal-klassijiet. Aħna nużaw klassijiet biex niddefinixxu tipi ta' data ġodda.
S'issa, tgħallimna dwar it-tipi ta 'dejta bażika f'Python bħal numri, kordi, u booleans. Dawn huma t-tipi ta 'dejta bażiċi jew sempliċi f'Python. Rajna wkoll ftit tipi ta' data kumplessi bħal listi u dizzjunarji.
Filwaqt li dawn it-tipi huma estremament utli, ma jistgħux dejjem jintużaw biex jimmudellaw kunċetti kumplessi. Per eżempju, aħseb dwar l-idea ta 'punt, jew shopping cart. A shopping cart mhuwiex boolean jew lista. Huwa tip differenti ta 'data. Allura nistgħu nużaw klassijiet biex niddefinixxu tipi ġodda biex jimmudellaw kunċetti reali.
Issa, ejja niddefinixxu tip ta 'dejta ġdid imsejjaħ punt. Dan it-tip ġdid se jkollu metodi kif iċċekkajna qabel.
Dan huwa kif se tagħmel dan:
Nibdew billi niddefinixxu klassi billi nużaw il-kelma prinċipali "klassi" u eżatt wara nagħtu isem lill-klassi tagħna.
class Point
Issa, ħares lejn il-konvenzjoni tal-ismijiet li użajt hawn. Stajt kapitalizzat l-ewwel ittra hawn, dan huwa dak li nsejħu konvenzjoni ta 'ismijiet pascal. Din il-konvenzjoni hija differenti minn dik li nużaw biex insemmu l-varjabbli u l-funzjonijiet tagħna li għalihom dejjem nużaw ittri żgħar u nisseparaw kliem multipli bl-użu ta’ underscore. Iżda meta nsemmi l-klassijiet, aħna ma nużawx linja ta' taħt biex nisseparaw kliem multipli minflok, aħna nikkapitalizzaw l-ewwel ittra ta' kull kelma.
Wara li tiddefinixxi l-klassi tagħna, tintuża kolon li jfisser li issa blokka hija definita.
class Point:
def move (self):
F'dan il-blokk, nistgħu niddefinixxu l-funzjonijiet jew il-metodi kollha li jappartjenu għall-punti. Pereżempju, nistgħu niddefinixxu funzjoni msejħa "ċaqlaq" biex nimxu punt. Innota li hekk kif nittajpja parentesi miftuħa, PyCharm awtomatikament iżid "awto" hawn. Din hija keyword speċjali u ħalluni nerġa' lura għal dan dalwaqt. Ejja nipprintjaw "ċaqlaq" fuq it-terminal.
print("move")
Ejja niddefinixxu metodu ieħor bħal "tiġbed" u tipprintjah fuq it-terminal.
def draw(self):
print("draw")
Għamilna d-definizzjoni tal-klassi "punt" tagħna. B'dan it-tip ġdid, nistgħu noħolqu oġġetti ġodda. Klassi sempliċement tiddefinixxi l-blueprint jew il-mudell għall-ħolqien ta' oġġetti li huma l-istanzi attwali bbażati fuq dak il-blueprint. Biex noħolqu oġġett, nittajpja l-isem tal-klassi tagħna u mbagħad insejħulha bħal funzjoni. Dan joħloq oġġett ġdid u mbagħad jirritornah. Imbagħad nistgħu naħżnu dak l-oġġett f'varjabbli. Ħallini nurik:
Hawnhekk iddefinijna "punt1" li huwa punt tridimensjonali. Tista 'tara li, nistgħu nipprintjaw koordinati individwali fuq it-terminal.
Nistgħu nużaw iż-żewġ metodi "tiġbed" u "nimxu" b'dan il-punt.
Allura biex terġa 'tiġbor, nużaw klassijiet biex niddefinixxu tipi ġodda u dawn it-tipi jista' jkollhom metodi li niddefinixxu fil-korp tal-klassi. Il-klassijiet jista' jkollhom attributi li nistgħu nissettjaw kullimkien fil-programmi tagħna.
Kostrutturi
S'issa, tgħallimna kif noħolqu tipi ġodda bl-użu ta 'klassijiet. Issa hemm problema żgħira b'din l-implimentazzjoni. Nistgħu noħolqu oġġett punt mingħajr koordinati x jew y billi tuża klassijiet u dan mhuwiex ideali. Ħallini nurik.
Ejja noħolqu punt u tipprintjah qabel ma nissettjaw il-koordinata x. It-tħaddim tal-programm tagħna jirriżulta fi żball ta' attribut bħal dan:
Dan ifisser li l-oġġett tal-punt m'għandu l-ebda attribut imsejjaħ x. Issa l-problema hija li huwa possibbli li jkun hemm oġġett punt mingħajr koordinati x jew y. Dan ma jagħmilx sens peress li kull meta nitkellmu dwar punt, irridu nkunu nafu fejn jinsab dak il-punt. Biex issolvi din il-problema, nużaw kostruttur. Kostruttur huwa funzjoni li tissejjaħ fil-ħin tal-ħolqien ta 'oġġett.
Hawn hu kif nużaw kostruttur. L-ewwel, ejja ngħaddu l-valuri tal-koordinati x u y fil-programm ta 'hawn fuq.
point = Point(10, 20)
print(point.x)
Issa, irridu nżidu metodu speċjali f'din il-klassi msejjaħ kostruttur. Is-sintassi tagħha hija bħal din:
def __init__(self, x, y):
init
huwa qasir għal initialized, u din hija l-funzjoni jew il-metodu li jissejjaħ meta jinħoloq oġġett punt ġdid. Il-x u y huma miżjuda dritt wara self
biex iżżid żewġ parametri żejda.
Wara dan, għandna nimmappjaw ix-x u y mal-valuri mgħoddija jiġifieri 10 u 20
self.x = x
self.y = y
Aħna nużaw l- self
biex tirreferi għall-oġġett kurrenti u mbagħad nissettjaw l-attribut x għall-argument x mgħoddi lill-funzjoni "x". B'dan il-mod, bl-użu init
metodu, nistgħu initialize oġġetti tagħna. Dan il-metodu jissejjaħ kostruttur. Ejja nmexxu l-programm tagħna.
Issa, nistgħu nibdlu l-koordinati x u y aktar tard. Ejja naġġornaw x koordinat:
point = Point(10, 20)
point.x = 11
print(point.x)
Issa, il-koordinata x hija aġġornata għall-valur 11.
Eżerċizzju
Hawn eżerċizzju interessanti għalik.
Irrid li tiddefinixxi tip ġdid imsejjaħ persuna. Dawn l-oġġetti "Persuna" għandu jkollhom "name
” attribut kif ukoll “talk()
” metodu.
Huwa kompitu sempliċi u m'għandux jieħu aktar minn ftit minuti.
Soluzzjoni
Ibda bid-definizzjoni tal-klassi "Persuna" bħal din:
class Person:
self.name = name
Aħna ser niddefinixxu l-kostruttur aktar tard. Issa, nistgħu noħolqu l-oġġett "Persuna". Ejja nsejħulha John
john = Person("John Smith")
print(john.name)
john.talk()
Issa, kompli għall-ewwel porzjon tal-kodiċi u oħloq kostruttur.
def __init__(self, name):
Il-kodiċi finali se jidher bħal dan:
Tista 'wkoll tuża kordi fformattjati u kunċetti oħra flimkien ma' klassijiet u kostrutturi.
Wirt
Il-wirt huwa kunċett ieħor assoċjat ma' klassijiet li jħalluk tuża mill-ġdid kodiċi.
Ikkunsidra din il-biċċa kodiċi.
class Dog:
def walk(self):
print("walk")
Ħloqna klassi "Kelb" b'metodu "mixja". F'dan il-metodu, aħna qed sempliċiment nipprintjaw il-messaġġ tal-mixja fuq it-terminal. Ejja ngħidu, fi programm reali, Hemm 10 linji ta 'kodiċi minflok linja waħda biss hawn. Fil-futur, jekk tkun meħtieġa klassi oħra biex ikollna l-metodu "mixja", ikollna nirrepetu dak il-kodiċi kollu. Dan mhux ideali.
Fl-ipprogrammar, għandna prinċipju msejjaħ DRY li huwa qasir għal ma tirrepetix lilek innifsek. Ejja ngħidu f'xi żmien fil-futur, niskopru problema bil-metodu "mixja" tagħna u jekk irripejna jew idduplipjajna dan il-metodu f'ħafna postijiet oħra, ikollna nerġgħu lura u nirranġaw dik il-problema f'kull post wieħed li dduplikajna dan. kodiċi. Għalhekk huwa għalhekk li fl-ipprogrammar m'għandniex niddefinixxu xi ħaġa darbtejn.
Hemm approċċi differenti biex tiġi rrimedjata din il-problema iżda hawnhekk se nitgħallmu dik li hija aktar faċli għal dawk li jibdew u tissejjaħ wirt. F'dan il-każ, aħna noħolqu klassi oħra "mammifer" u niddefinixxu l-attribut tagħna "mixja" f'dik il-klassi.
class Mammal:
def walk(self):
print("walk")
Wara li niddefinixxu l-klassi "Mammiferi" tagħna nistgħu nużaw il-wirt biex ngħaddu l-attributi bħal dan:
Kemm il-klassi tal-klieb kif ukoll tal-qtates qed jirtu l-metodi tal-klassi kollha definiti fil-klassi ġenitur tagħhom. Issa, nistgħu nżidu metodi speċifiċi għall-klieb bħal dan:
class Dog:
def bark(self):
print("bark")
Nagħlaq!
Dan kien kollu dwar il-klassijiet, il-kostrutturi u l-użu mill-ġdid tal-kodiċi fi klassijiet b'kunċetti ta 'wirt. Issa qed noqorbu lejn it-tmiem tas-serje tagħna. Sa dan il-punt, għandek tkun kapaċi tipproduċi kodiċijiet tajbin, li jinqraw u konċiżi f'Python.
Se naraw il-kunċett ta 'moduli u pakketti fil-lecture li jmiss.
Ħalli Irrispondi