Šajā lekcijā mēs uzzināsim par klasēm, konstruktoriem un mantošanu pitonā.
Šie jēdzieni ir patiešām svarīgi lielā programmā, kur ir jādefinē dažādi veidi.
Klases
Nodarbības ir būtiskas programmēšanai, un tās nav specifiskas python. Daudzas citas programmēšanas valodas atbalstīt klašu jēdzienu. Mēs izmantojam klases, lai definētu jaunus datu tipus.
Līdz šim esam uzzinājuši par Python pamatdatu tipiem, piemēram, skaitļiem, virknēm un Būla vērtībām. Šie ir pamata vai vienkāršie datu veidi programmā Python. Mēs esam redzējuši arī dažus sarežģītus datu tipus, piemēram, sarakstus un vārdnīcas.
Lai gan šie veidi ir ļoti noderīgi, tos ne vienmēr var izmantot sarežģītu koncepciju modelēšanai. Piemēram, padomājiet par domu par punktu vai iepirkumu grozu. Iepirkumu grozs nav Būla vērtība vai saraksts. Tie ir cita veida dati. Tātad mēs varam izmantot klases, lai definētu jaunus veidus, lai modelētu reālus jēdzienus.
Tagad definēsim jaunu datu tipu, ko sauc par punktu. Šim jaunajam tipam būs metodes, kā mēs pārbaudījām iepriekš.
Jūs to darīsiet šādi:
Mēs sākam ar klases definēšanu, izmantojot atslēgvārdu “klase”, un tūlīt pēc tam mēs piešķiram klasei nosaukumu.
class Point
Tagad apskatiet nosaukšanas principu, ko esmu izmantojis šeit. Šeit pirmo burtu esmu rakstījis ar lielo burtu, tas ir tas, ko mēs saucam par paskāla nosaukumu. Šis paņēmiens atšķiras no tā, ko izmantojam mainīgo un funkciju nosaukšanai, kurām vienmēr lietojam mazos burtus un atdalām vairākus vārdus, izmantojot pasvītrojumu. Bet, nosaucot klases, mēs neizmantojam pasvītrojumu, lai atdalītu vairākus vārdus, tā vietā mēs rakstām katra vārda pirmo burtu.
Pēc mūsu klases definēšanas tiek izmantots kols, kas nozīmē, ka tagad ir definēts bloks.
class Point:
def move (self):
Šajā blokā mēs varam definēt visas funkcijas vai metodes, kas pieder punktiem. Piemēram, punkta pārvietošanai varam definēt funkciju ar nosaukumu “pārvietot”. Ņemiet vērā, ka, tiklīdz mēs ierakstām atvērtās iekavas, PyCharm šeit automātiski pievieno “self”. Šis ir īpašs atslēgvārds, un ļaujiet man drīzumā atgriezties pie tā. Izdrukāsim terminālī “pārvietot”.
print("move")
Definēsim citu metodi, piemēram, “zīmēt” un izdrukāsim to terminālī.
def draw(self):
print("draw")
Mēs esam pabeiguši mūsu “punktu” klases definīciju. Izmantojot šo jauno veidu, mēs varam izveidot jaunus objektus. Klase vienkārši definē projektu vai veidni, lai izveidotu objektus, kas ir faktiskie gadījumi, pamatojoties uz šo projektu. Lai izveidotu objektu, mēs ierakstām savas klases nosaukumu un pēc tam izsaucam to tāpat kā funkciju. Tas izveido jaunu objektu un pēc tam to atgriež. Tad mēs varam saglabāt šo objektu mainīgajā. Ļaujiet man jums parādīt:
Šeit mēs esam definējuši “point1”, kas ir trīsdimensiju punkts. To var redzēt, terminālī varam izdrukāt atsevišķas koordinātes.
Ar šo punktu mēs varam izmantot divas metodes “zīmēt” un “pārvietot”.
Atgādinot, mēs izmantojam klases, lai definētu jaunus tipus, un šiem tipiem var būt metodes, kuras mēs definējam klases pamattekstā. Klasēm var būt atribūti, ko mēs varam iestatīt jebkur savās programmās.
Konstruktori
Līdz šim esam iemācījušies izveidot jaunus tipus, izmantojot nodarbības. Tagad ir neliela problēma ar šo ieviešanu. Mēs varam izveidot punktu objektu bez x vai y koordinātas, izmantojot klases, un tas nav ideāli. Ļaujiet man jums parādīt.
Izveidosim punktu un izdrukāsim to pirms x koordinātas iestatīšanas. Palaižot mūsu programmu, tiek parādīta šāda atribūta kļūda:
Tas nozīmē, ka punkta objektam nav atribūta ar nosaukumu x. Tagad problēma ir tāda, ka ir iespējams punktveida objekts bez x vai y koordinātām. Tam nav jēgas, jo vienmēr, kad mēs runājam par punktu, mums ir jāzina, kur šis punkts atrodas. Lai atrisinātu šo problēmu, mēs izmantojam konstruktoru. Konstruktors ir funkcija, kas tiek izsaukta objekta izveides laikā.
Lūk, kā mēs izmantojam konstruktoru. Vispirms nodosim x un y koordinātu vērtības iepriekš minētajā programmā.
point = Point(10, 20)
print(point.x)
Tagad mums šajā klasē jāpievieno īpaša metode, ko sauc par konstruktoru. Tās sintakse ir šāda:
def __init__(self, x, y):
init
ir inicializēta saīsinājums, un šī ir funkcija vai metode, kas tiek izsaukta, kad tiek izveidots jauns punkta objekts. X un y tiek pievienoti uzreiz pēc tam self
lai pievienotu divus papildu parametrus.
Pēc tam mums vajadzētu kartēt x un y ar nodotajām vērtībām, ti, 10 un 20
self.x = x
self.y = y
Mēs izmantojam self
lai atsauktos uz pašreizējo objektu, un pēc tam mēs iestatām atribūtu x uz argumentu x, kas nodots funkcijai “x”. Tādā veidā, izmantojot init
metodi, mēs varam inicializēt savus objektus. Šo metodi sauc par konstruktoru. Palaidīsim savu programmu.
Tagad mēs varam mainīt x un y koordinātas vēlāk. Atjaunināsim x koordinātu:
point = Point(10, 20)
point.x = 11
print(point.x)
Tagad x koordināta ir atjaunināta uz vērtību 11.
Izmantot
Šeit ir interesants vingrinājums jums.
Es vēlos, lai jūs definētu jaunu tipu, ko sauc par personu. Šiem “personas” objektiem ir jābūt “name
" atribūts, kā arī "talk()
”Metodi.
Tas ir vienkāršs uzdevums, un tam nevajadzētu aizņemt vairāk par pāris minūtēm.
Šķīdums
Sāciet ar klases “Persona” definēšanu šādi:
class Person:
self.name = name
Konstruktoru definēsim vēlāk. Tagad mēs varam izveidot objektu “Persona”. Sauksim to par Jāni
john = Person("John Smith")
print(john.name)
john.talk()
Tagad pārejiet uz koda pirmo daļu un izveidojiet konstruktoru.
def __init__(self, name):
Galīgais kods izskatīsies šādi:
Varat arī izmantot formatētas virknes un citus jēdzienus kopā ar klasēm un konstruktoriem.
Mantojums
Mantojums ir vēl viens jēdziens, kas saistīts ar klasēm, kas ļauj atkārtoti izmantot kodu.
Apsveriet šo koda daļu.
class Dog:
def walk(self):
print("walk")
Esam izveidojuši nodarbību “Suns” ar “pastaigas” metodi. Izmantojot šo metodi, mēs vienkārši izdrukājam pastaigu ziņojumu terminālī. Pieņemsim, ka reālā programmā šeit ir 10 koda rindiņas, nevis tikai viena rindiņa. Nākotnē, ja būs nepieciešama cita klase, lai izmantotu metodi “staigāt”, mums būs jāatkārto viss šis kods. Tas nav ideāli.
Programmēšanā mums ir princips DRY, kas ir saīsinājums no neatkārtojies. Pieņemsim, ka kādreiz nākotnē mēs atklājam problēmu ar mūsu “staigāšanas” metodi, un, ja mēs esam atkārtojuši vai dublējuši šo metodi daudzās citās vietās, mums būs jāatgriežas un jānovērš šī problēma katrā atsevišķā vietā, kur mēs to esam dublējuši. kodu. Tāpēc programmējot mums nevajadzētu kaut ko definēt divreiz.
Šīs problēmas risināšanai ir dažādas pieejas, taču šeit mēs apgūsim to, kas ir vieglāka iesācējiem, un to sauc par mantojumu. Šajā gadījumā mēs izveidosim citu klasi “zīdītājs” un definēsim mūsu atribūtu “staigāt” šajā klasē.
class Mammal:
def walk(self):
print("walk")
Pēc mūsu klases “Mammal” definēšanas mēs varam izmantot mantojumu, lai nodotu atribūtus šādi:
Gan suņu, gan kaķu klases manto visas klases metodes, kas definētas viņu vecāku klasē. Tagad mēs varam pievienot metodes, kas raksturīgas suņiem, piemēram:
class Dog:
def bark(self):
print("bark")
Satīt!
Tas viss bija par klasēm, konstruktoriem un koda atkārtotu izmantošanu klasēs ar mantojuma jēdzieniem. Tagad mēs tuvojamies mūsu sērijas beigām. Šajā brīdī jums vajadzētu būt iespējai Python izveidot labus, lasāmus un kodolīgus kodus.
Moduļu un pakešu koncepciju redzēsim nākamajā lekcijā.
Atstāj atbildi