În această prelegere, vom afla despre clase, constructori și moștenire în python.
Aceste concepte sunt cu adevărat importante într-un program mare în care este nevoie să fie definite diferite tipuri.
Clase
Clasele sunt esențiale în programare și nu sunt specifice pentru python. Multe altele limbaje de programare susține noțiunea de clase. Folosim clase pentru a defini noi tipuri de date.
Până acum, am învățat despre tipurile de date de bază în Python, cum ar fi numere, șiruri de caractere și valori booleene. Acestea sunt tipurile de date de bază sau simple în Python. Am văzut, de asemenea, câteva tipuri de date complexe, cum ar fi liste și dicționare.
Deși aceste tipuri sunt extrem de utile, ele nu pot fi întotdeauna folosite pentru a modela concepte complexe. De exemplu, gândiți-vă la ideea unui punct sau a unui coș de cumpărături. Un coș de cumpărături nu este un boolean sau o listă. Este un alt tip de date. Deci putem folosi clase pentru a defini noi tipuri pentru a modela concepte reale.
Acum, să definim un nou tip de date numit punct. Acest nou tip va avea metode așa cum am verificat înainte.
Iată cum o vei face:
Începem prin a defini o clasă folosind cuvântul cheie „clasă” și imediat după aceea dăm un nume clasei noastre.
class Point
Acum, uită-te la convenția de denumire pe care am folosit-o aici. Am scris prima literă cu majuscule aici, aceasta este ceea ce numim o convenție de denumire pascal. Această convenție este diferită de cea pe care o folosim pentru denumirea variabilelor și funcțiilor noastre pentru care folosim întotdeauna litere mici și separăm mai multe cuvinte folosind un caracter de subliniere. Dar atunci când denumim clase, nu folosim un caracter de subliniere pentru a separa mai multe cuvinte, ci scriem prima literă a fiecărui cuvânt.
După definirea clasei noastre, se folosesc două puncte, ceea ce înseamnă că acum este definit un bloc.
class Point:
def move (self):
În acest bloc, putem defini toate funcțiile sau metodele care aparțin punctelor. De exemplu, putem defini o funcție numită „mutare” pentru mutarea unui punct. Rețineți că, de îndată ce introducem paranteze deschise, PyCharm adaugă automat „self” aici. Acesta este un cuvânt cheie special și permiteți-mi să revin la acesta în scurt timp. Să tipărim „mutare” pe terminal.
print("move")
Să definim o altă metodă precum „desenăm” și să o imprimăm pe terminal.
def draw(self):
print("draw")
Am terminat cu definiția clasei noastre „punct”. Cu acest nou tip, putem crea noi obiecte. O clasă definește pur și simplu planul sau șablonul pentru crearea obiectelor care sunt instanțe reale bazate pe acel plan. Pentru a crea un obiect, introducem numele clasei noastre și apoi îl numim la fel ca o funcție. Acest lucru creează un nou obiect și apoi îl returnează. Apoi putem stoca acel obiect într-o variabilă. Lasa-ma sa-ti arat:
Aici am definit un „punct1” care este un punct tridimensional. Puteți vedea că, putem imprima coordonatele individuale pe terminal.
Putem folosi cele două metode „desen” și „mutare” cu acest punct.
Deci, pentru a recapitula, folosim clase pentru a defini noi tipuri și aceste tipuri pot avea metode pe care le definim în corpul clasei. Clasele pot avea atribute pe care le putem seta oriunde în programele noastre.
Constructori
Până acum, am învățat cum să creăm noi tipuri folosind clase. Acum există o mică problemă cu această implementare. Putem crea un obiect punct fără o coordonată x sau y folosind clase și asta nu este ideal. Lasa-ma sa-ti arat.
Să creăm un punct și să-l imprimăm înainte de a seta coordonatele x. Rularea programului nostru are ca rezultat o eroare de atribut ca aceasta:
Înseamnă că obiectul punct nu are un atribut numit x. Acum problema este că este posibil să existe un obiect punct fără coordonate x sau y. Acest lucru nu are sens, deoarece ori de câte ori vorbim despre un punct, trebuie să știm unde se află acel punct. Pentru a rezolva această problemă, folosim un constructor. Un constructor este o funcție care este apelată în momentul creării unui obiect.
Iată cum folosim un constructor. Mai întâi, să transmitem valorile coordonatelor x și y în programul de mai sus.
point = Point(10, 20)
print(point.x)
Acum, trebuie să adăugăm o metodă specială în această clasă numită constructor. Sintaxa sa este astfel:
def __init__(self, x, y):
init
este prescurtarea pentru initialized, iar aceasta este funcția sau metoda care este apelată atunci când este creat un nou obiect punct. X și y sunt adăugate imediat după self
pentru a adăuga doi parametri suplimentari.
După aceea, ar trebui să mapam x și y la valorile transmise, adică 10 și 20
self.x = x
self.y = y
Noi folosim self
pentru a face referire la obiectul curent și apoi setăm atributul x la argumentul x transmis funcției „x”. În acest fel, folosind init
metoda, ne putem inițializa obiectele. Această metodă este denumită un constructor. Să rulăm programul nostru.
Acum, putem schimba coordonatele x și y mai târziu. Să actualizăm coordonatele x:
point = Point(10, 20)
point.x = 11
print(point.x)
Acum, coordonata x este actualizată la valoarea 11.
Exercita
Iată un exercițiu interesant pentru tine.
Vreau să definiți un nou tip numit persoană. Aceste obiecte „Persoană” ar trebui să aibă un „name
„, precum și un „talk()
”Metoda.
Este o sarcină simplă și nu ar trebui să dureze mai mult de câteva minute.
Soluţie
Începeți cu definirea clasei „Persoană” astfel:
class Person:
self.name = name
Vom defini constructorul mai târziu. Acum, putem crea obiectul „Persoană”. Să-i spunem John
john = Person("John Smith")
print(john.name)
john.talk()
Acum, treceți la prima porțiune a codului și creați un constructor.
def __init__(self, name):
Codul final va arăta astfel:
De asemenea, puteți utiliza șiruri formatate și alte concepte împreună cu clase și constructori.
Moştenire
Moștenirea este un alt concept asociat cu clasele care vă permit să reutilizați un cod.
Luați în considerare această bucată de cod.
class Dog:
def walk(self):
print("walk")
Am creat o clasă „Câine” cu metoda „plimbare”. În această metodă, pur și simplu tipărim mesajul de mers pe terminal. Să presupunem că, într-un program real, există 10 linii de cod în loc de o singură linie aici. În viitor, dacă este nevoie de o altă clasă pentru a avea metoda „walk”, va trebui să repetăm tot acel cod. Acest lucru nu este ideal.
În programare, avem un principiu numit DRY care este prescurtarea pentru nu te repeta. Să spunem cândva în viitor, descoperim o problemă cu metoda noastră „mers pe jos” și dacă am repetat sau duplicat această metodă în multe alte locuri, va trebui să revenim și să remediem acea problemă în fiecare loc în care am duplicat aceasta. cod. Deci, de aceea, în programare nu ar trebui să definim ceva de două ori.
Există diferite abordări pentru a remedia această problemă, dar aici o vom învăța pe cea care este mai ușoară pentru începători și se numește moștenire. În acest caz, vom crea o altă clasă „mamifer” și vom defini atributul nostru „plimbare” în acea clasă.
class Mammal:
def walk(self):
print("walk")
După definirea clasei noastre „Mamifer”, putem folosi moștenirea pentru a transmite atributele astfel:
Atât clasele de câini, cât și cele de pisici moștenesc toate metodele de clasă definite în clasa lor părinte. Acum, putem adăuga metode specifice câinilor ca aceasta:
class Dog:
def bark(self):
print("bark")
Învelire!
Acesta a fost totul despre clase, constructori și reutilizarea codului în clase cu concepte de moștenire. Acum ne apropiem de finalul seriei noastre. Până în acest moment, ar trebui să puteți produce coduri bune, lizibile și concise în Python.
Vom vedea conceptul de module și pachete în cursul următoare.
Lasă un comentariu