Pregled sadržaja[Sakriti][Pokazati]
U ovom predavanju ćemo učiti o klasama, konstruktorima i nasljeđivanju u pythonu.
Ovi koncepti su stvarno važni u velikom programu gdje je potrebno definirati različite tipove.
Nastava
Klase su bitne u programiranju i nisu specifične za python. Mnogi drugi programski jezici podržavaju pojam klasa. Koristimo klase za definiranje novih tipova podataka.
Do sada smo naučili o osnovnim tipovima podataka u Pythonu kao što su brojevi, nizovi i booleovi. Ovo su osnovni ili jednostavni tipovi podataka u Pythonu. Također smo vidjeli nekoliko složenih tipova podataka poput popisa i rječnika.
Iako su ove vrste izuzetno korisne, ne mogu se uvijek koristiti za modeliranje složenih koncepata. Na primjer, razmislite o ideji točke ili kolica za kupnju. Košarica za kupnju nije Booleova vrijednost ili popis. To je drugačija vrsta podataka. Dakle, možemo koristiti klase za definiranje novih tipova za modeliranje stvarnih koncepata.
Sada definirajmo novi tip podataka koji se zove točka. Ovaj novi tip će imati metode kao što smo provjerili prije.
Ovako ćete to učiniti:
Počinjemo s definiranjem klase korištenjem ključne riječi “class” i odmah nakon toga dajemo našoj klasi ime.
class Point
Sada, pogledajte konvenciju imenovanja koju sam ovdje koristio. Ovdje sam prvo slovo napisao velikim, to je ono što zovemo Pascal konvencija imenovanja. Ova se konvencija razlikuje od one koju koristimo za imenovanje naših varijabli i funkcija za koje uvijek koristimo mala slova i odvajamo više riječi podvlakom. Ali kada imenujemo klase, umjesto toga ne koristimo podvlaku za odvajanje više riječi, već veliko slovo svake riječi.
Nakon definiranja naše klase koristi se dvotočka što znači da je sada blok definiran.
class Point:
def move (self):
U ovom bloku možemo definirati sve funkcije ili metode koje pripadaju točkama. Na primjer, možemo definirati funkciju pod nazivom "move" za pomicanje točke. Imajte na umu da čim upišemo otvorenu zagradu, PyCharm automatski dodaje "self" ovdje. Ovo je posebna ključna riječ i dopustite mi da se vratim na nju uskoro. Ispišite “move” na terminalu.
print("move")
Definirajmo drugu metodu kao što je "crtanje" i ispišite je na terminalu.
def draw(self):
print("draw")
Završili smo s definicijom naše "točkaste" klase. S ovom novom vrstom možemo stvarati nove objekte. Klasa jednostavno definira nacrt ili predložak za stvaranje objekata koji su stvarne instance temeljene na tom nacrtu. Da bismo stvorili objekt, upisujemo naziv naše klase i zatim je pozivamo kao funkciju. Ovo stvara novi objekt i zatim ga vraća. Tada taj objekt možemo pohraniti u varijablu. Da ti pokažem:
Ovdje smo definirali "točku1" koja je trodimenzionalna točka. Možete vidjeti da možemo ispisati pojedinačne koordinate na terminalu.
S ovom točkom možemo koristiti dvije metode "crtanje" i "pomicanje".
Dakle, da rezimiramo, koristimo klase za definiranje novih tipova i ti tipovi mogu imati metode koje definiramo u tijelu klase. Klase mogu imati atribute koje možemo postaviti bilo gdje u našim programima.
Konstruktori
Do sada smo naučili kako stvoriti nove tipove pomoću klasa. Sada postoji mali problem s ovom implementacijom. Možemo stvoriti točkasti objekt bez x ili y koordinate pomoću klasa, a to nije idealno. Da ti pokažem.
Stvorimo točku i ispišemo je prije nego što postavimo x koordinatu. Pokretanje našeg programa rezultira ovakvom pogreškom atributa:
To znači da točkasti objekt nema atribut koji se zove x. Sada je problem u tome što je moguće imati točkasti objekt bez x ili y koordinata. Ovo nema smisla jer kad god govorimo o točki, moramo znati gdje se ta točka nalazi. Za rješavanje ovog problema koristimo konstruktor. Konstruktor je funkcija koja se poziva u trenutku stvaranja objekta.
Evo kako koristimo konstruktor. Prvo, proslijedimo vrijednosti x i y koordinata u gornjem programu.
point = Point(10, 20)
print(point.x)
Sada moramo dodati posebnu metodu u ovu klasu koja se zove konstruktor. Njegova sintaksa je ovakva:
def __init__(self, x, y):
init
je skraćenica za inicijalizirano, a to je funkcija ili metoda koja se poziva kada se kreira novi točkasti objekt. X i y se dodaju odmah iza self
za dodavanje dva dodatna parametra.
Nakon toga, trebali bismo preslikati x i y na proslijeđene vrijednosti, tj. 10 i 20
self.x = x
self.y = y
Koristimo self
da se odnosi na trenutni objekt i tada postavljamo atribut x na argument x proslijeđen funkciji “x”. Na ovaj način, koristeći init
možemo inicijalizirati naše objekte. Ova metoda se naziva konstruktor. Pokrenimo naš program.
Sada možemo kasnije promijeniti x i y koordinate. Ažurirajmo x koordinatu:
point = Point(10, 20)
point.x = 11
print(point.x)
Sada je x koordinata ažurirana na vrijednost 11.
Vježba
Evo jedne zanimljive vježbe za vas.
Želim da definirate novi tip koji se zove osoba. Ovi objekti "Osobe" trebaju imati "name
" kao i "talk()
”Metoda.
To je jednostavan zadatak i ne bi trebao trajati više od nekoliko minuta.
Riješenje
Započnite definiranjem klase "Osoba" ovako:
class Person:
self.name = name
Konstruktor ćemo definirati kasnije. Sada možemo stvoriti objekt "Osoba". Nazovimo ga John
john = Person("John Smith")
print(john.name)
john.talk()
Sada prijeđite na prvi dio koda i izradite konstruktor.
def __init__(self, name):
Konačni kod će izgledati ovako:
Također možete koristiti formatirane nizove i druge koncepte u kombinaciji s klasama i konstruktorima.
Nasljeđivanje
Nasljeđivanje je još jedan koncept povezan s klasama koje vam omogućuju ponovnu upotrebu koda.
Razmotrite ovaj dio koda.
class Dog:
def walk(self):
print("walk")
Napravili smo klasu "Pas" s metodom "šetnje". U ovoj metodi jednostavno ispisujemo poruku hodanja na terminalu. Recimo, u stvarnom programu postoji 10 linija koda umjesto samo jedne linije ovdje. U budućnosti, ako još jedna klasa bude potrebna za metodu "hodanja", morat ćemo ponoviti sav taj kod. Ovo nije idealno.
U programiranju imamo princip koji se zove DRY što je skraćenica za ne ponavljaj se. Recimo da nekada u budućnosti otkrijemo problem s našom metodom "šetnje" i ako smo ovu metodu ponovili ili duplicirali na mnogim drugim mjestima, morat ćemo se vratiti i riješiti taj problem na svakom pojedinom mjestu na kojem smo ovo duplicirali kodirati. Zato u programiranju ne bismo trebali nešto dvaput definirati.
Postoje različiti pristupi rješavanju ovog problema, ali ovdje ćemo naučiti onaj koji je lakši za početnike, a zove se nasljeđivanje. U ovom slučaju, stvorit ćemo još jednu klasu "sisavac" i definirati naš atribut "hodati" u toj klasi.
class Mammal:
def walk(self):
print("walk")
Nakon definiranja naše klase "Sisavac" možemo koristiti nasljeđivanje za prosljeđivanje atributa ovako:
I klase psa i mačke nasljeđuju sve metode klase definirane u njihovoj roditeljskoj klasi. Sada možemo dodati metode specifične za pse poput ove:
class Dog:
def bark(self):
print("bark")
Zamotati!
Ovo se sve odnosilo na klase, konstruktore i ponovnu upotrebu koda u klasama s konceptima nasljeđivanja. Sada smo pri kraju naše serije. Do ove točke trebali biste moći proizvesti dobre, čitljive i sažete kodove u Pythonu.
Koncept modula i paketa vidjet ćemo na sljedećem predavanju.
Ostavi odgovor