Table di cuntinutu[Piattà][Mostra]
In questa cunferenza, ampararemu nantu à e classi, i custruttori è l'eredità in python.
Questi cuncetti sò veramente impurtanti in un grande prugramma induve diverse tipi sò necessarii per esse definiti.
Corsi
I classi sò essenziali in a prugrammazione è ùn sò micca specifichi per python. Tanti altri lingue di prugrammazione sustene a nuzione di classi. Avemu aduprà classi per definisce novi tipi di dati.
Finu a ora, avemu amparatu nantu à i tipi di dati basi in Python cum'è numeri, strings è booleani. Quessi sò i tipi di dati basi o simplici in Python. Avemu vistu ancu un coppiu di tippi di dati cumplessi cum'è listi è dizziunari.
Mentre chì sti tipi sò estremamente utili, ùn ponu micca sempre esse usatu per mudificà cuncetti cumplessi. Per esempiu, pensate à l'idea di un puntu, o un shopping cart. Un shopping cart ùn hè micca un boolean o una lista. Hè un altru tipu di dati. Allora pudemu usà classi per definisce novi tipi per mudeli cuncetti reali.
Avà, definiscemu un novu tipu di dati chjamatu puntu. Stu novu tipu hà da avè i metudi cum'è avemu verificatu prima.
Eccu cumu si farà:
Cuminciamu per definisce una classa usendu a chjave "classe" è subitu dopu damu un nome à a nostra classe.
class Point
Avà, fighjate à a cunvenzione di nomi chì aghju utilizatu quì. Aghju capitalizatu a prima lettera quì, questu hè ciò chì chjamemu una cunvenzione di nome pascal. Questa cunvenzione hè sfarente da quella chì avemu usatu per chjamà e nostre variàbili è funzioni per quale avemu sempre aduprà lettere minuscule è separà parechje parolle cù un underscore. Ma quandu chjamate classi, ùn usemu micca un underscore per separà parechje parolle invece, capitalizemu a prima lettera di ogni parolla.
Dopu avè definitu a nostra classa, un colon hè utilizatu chì significa chì avà un blocu hè definitu.
class Point:
def move (self):
In questu bloccu, pudemu definisce tutte e funzioni o metudi chì appartenenu à i punti. Per esempiu, pudemu definisce una funzione chjamata "move" per trasfurmà un puntu. Nota chì appena scrivemu parentesi aperte, PyCharm aghjusta automaticamente "self" quì. Questa hè una chjave speciale è lasciami torna à questu prestu. Stampemu "move" in u terminal.
print("move")
Definimu un altru mètudu cum'è "disegnu" è stampate nantu à u terminal.
def draw(self):
print("draw")
Avemu finitu cù a definizione di a nostra classa "puntu". Cù stu novu tipu, pudemu creà novi oggetti. Una classa definisce solu u pianu o u mudellu per creà l'uggetti chì sò l'istanze attuali basate nantu à quellu pianu. Per creà un ughjettu, scrivemu u nome di a nostra classa è poi chjamemu cum'è una funzione. Questu crea un novu ughjettu è poi u torna. Allora pudemu almacenà quellu ughjettu in una variàbile. Lasciami mustrà:
Quì avemu definitu un "puntu1" chì hè un puntu tridimensionale. Pudete vede chì, pudemu stampà coordenate individuali nantu à u terminal.
Pudemu aduprà i dui metudi "draw" è "move" cù questu puntu.
Allora per ricuperà, usemu classi per definisce novi tipi è questi tipi ponu avè metudi chì avemu definitu in u corpu di a classa. E classi ponu avè attributi chì pudemu stabilisce in ogni locu in i nostri prugrammi.
Custruttori
Finu a ora, avemu amparatu à creà novi tipi cù classi. Avà ci hè un picculu prublema cù sta implementazione. Pudemu creà un ughjettu puntuale senza una coordenada x o y usando classi è chì ùn hè micca ideale. Lasciami mustrà.
Creemu un puntu è stampemu prima di stabilisce a coordenada x. Esecuzione di u nostru prugramma risultati in un errore d'attributu cum'è questu:
Significa chì l'ughjettu puntuale ùn hà micca attributu chjamatu x. Avà u prublema hè chì hè pussibule avè un ughjettu puntuale senza coordenate x o y. Questu ùn hà micca sensu cum'è ogni volta chì parlemu di un puntu, avemu bisognu di sapè induve si trova quellu puntu. Per risolve stu prublema, avemu aduprà un constructore. Un custruttore hè una funzione chì si chjama à u mumentu di creà un oggettu.
Eccu cumu usemu un constructore. Prima, passemu i valori di coordenate x è y in u prugramma sopra.
point = Point(10, 20)
print(point.x)
Avà, avemu bisognu di aghjunghje un metudu speciale in questa classa chjamata constructore. A so sintassi hè cusì:
def __init__(self, x, y):
init
hè cortu per inizializatu, è questu hè a funzione o u metudu chì hè chjamatu quandu un novu ughjettu puntu hè creatu. X è y sò aghjuntu subitu dopu self
per aghjunghje dui parametri extra.
Dopu quì, duvemu mapà u x è y à i valori passati, vale à dì 10 è 20
self.x = x
self.y = y
Avemu l'usu self
per riferite à l'ughjettu attuale è dopu avemu stabilitu l'attributu x à l'argumentu x passatu à a funzione "x". In questu modu, usendu init
metudu, pudemu inizializà i nostri ogetti. Stu metudu hè chjamatu custruttore. Eseguimu u nostru prugramma.
Avà, pudemu cambià e coordenate x è y più tardi. Aghjurnà a coordenada x:
point = Point(10, 20)
point.x = 11
print(point.x)
Avà, a coordenada x hè aghjurnata à u valore 11.
Exercise
Eccu un esercitu interessante per voi.
Vogliu chì definisce un novu tipu chjamatu persona. Questi oggetti "Persona" duveranu avè un "name
" attributu cum'è un "talk()
»Metudu.
Hè un compitu simplice è ùn deve piglià più di un paru di minuti.
Vergogna à tè
Cumincià cù a definizione di a classa "Persona" cusì:
class Person:
self.name = name
Definiremu u custruttore dopu. Avà, pudemu creà l'ughjettu "Persona". Chjamemu Ghjuvanni
john = Person("John Smith")
print(john.name)
john.talk()
Avà, andate à a prima parte di u codice è crea un custruttore.
def __init__(self, name):
U codice finale sarà cusì:
Pudete ancu aduprà stringhe formate è altri cuncetti in cunghjunzione cù classi è custruttori.
làscita
L'eredità hè un altru cuncettu assuciatu cù e classi chì permettenu di riutilizà un codice.
Cunsiderate stu pezzu di codice.
class Dog:
def walk(self):
print("walk")
Avemu criatu una classa "Cane" cù un metudu "caminata". In questu metudu, simu simpricimenti stampendu u messagiu di caminata nantu à u terminal. Diciamu, in un veru prugramma, Ci sò 10 linee di codice invece di una sola linea quì. In u futuru, se una altra classa hè necessariu per avè u metudu "caminata", avemu da ripetiri tuttu quellu codice. Questu ùn hè micca ideale.
In a prugrammazione, avemu un principiu chjamatu DRY chì hè cortu per ùn ripetite. Diciamu qualchì volta in u futuru, scopremu un prublema cù u nostru metudu di "camminata" è se avemu ripetutu o duplicatu stu metudu in parechji altri lochi, avemu da vultà è risolve u prublema in ogni locu chì avemu duplicatu questu. codice. Hè per quessa chì in a prugrammazione ùn deve micca definisce qualcosa duie volte.
Ci sò diversi approcci per rimedià stu prublema, ma quì avemu da amparà quellu chì hè più faciule per i principianti è si chjama l'eredità. In questu casu, creeremu una altra classa "mammifera" è definisce u nostru attributu "caminata" in quella classa.
class Mammal:
def walk(self):
print("walk")
Dopu avè definitu a nostra classa "Mammiferi", pudemu usà l'eredità per passà l'attributi cusì:
Tramindui e classi di cani è gatti ereditenu tutti i metudi di classi definiti in a so classa parenti. Avà, pudemu aghjunghje metudi specifichi per i cani cum'è questu:
class Dog:
def bark(self):
print("bark")
Conclude!
Questu era tuttu nantu à e classi, i custruttori è a reutilizazione di u codice in classi cù cuncetti di eredità. Avà simu vicinu à a fine di a nostra serie. À questu puntu, duvete esse capace di pruduce codici boni, leghjite è cuncisi in Python.
Videremu u cuncettu di moduli è pacchetti in a prossima lezione.
Lascia un Audiolibro