Turinys[Slėpti][Rodyti]
Šioje paskaitoje sužinosime apie python klases, konstruktorius ir paveldėjimą.
Šios sąvokos yra tikrai svarbios didelėje programoje, kurioje reikia apibrėžti skirtingus tipus.
Klasės
Klasės yra būtinos programuojant ir nėra būdingos python. Daugelis kitų programavimo kalbos palaiko klasių sąvoką. Naujiems duomenų tipams apibrėžti naudojame klases.
Iki šiol sužinojome apie pagrindinius Python duomenų tipus, pvz., skaičius, eilutes ir loginius duomenis. Tai yra pagrindiniai arba paprasti Python duomenų tipai. Taip pat matėme keletą sudėtingų duomenų tipų, pvz., sąrašų ir žodynų.
Nors šie tipai yra labai naudingi, jie ne visada gali būti naudojami sudėtingoms koncepcijoms modeliuoti. Pavyzdžiui, pagalvokite apie taško ar pirkinių krepšelio idėją. Pirkinių krepšelis nėra loginis ar sąrašas. Tai kitokio pobūdžio duomenys. Taigi galime naudoti klases, kad apibrėžtume naujus tipus, kad modeliuotume tikras sąvokas.
Dabar apibrėžkime naują duomenų tipą, vadinamą tašku. Šis naujas tipas turės metodus, kaip mes tikrinome anksčiau.
Štai kaip tai padarysite:
Pradedame apibrėždami klasę naudodami raktinį žodį „klasė“ ir iškart po to suteikiame klasei pavadinimą.
class Point
Dabar pažvelkite į vardų suteikimo tvarką, kurią naudoju čia. Pirmąją raidę parašiau didžiąja raide, tai mes vadiname Pascal įvardijimo sutartimi. Ši taisyklė skiriasi nuo tos, kurią naudojame pavadindami savo kintamuosius ir funkcijas, kurioms visada naudojame mažąsias raides ir atskiriame kelis žodžius naudodami apatinį brūkšnį. Tačiau pavadindami klases nenaudojame apatinio brūkšnio, kad atskirtume kelis žodžius, o kiekvieno žodžio pirmąją raidę rašome didžiosiomis raidėmis.
Apibrėžus mūsų klasę, naudojamas dvitaškis, o tai reiškia, kad dabar yra apibrėžtas blokas.
class Point:
def move (self):
Šiame bloke galime apibrėžti visas taškams priklausančias funkcijas ar metodus. Pavyzdžiui, taško perkėlimui galime apibrėžti funkciją, vadinamą „judėti“. Atminkite, kad kai tik įvedame atvirus skliaustus, PyCharm čia automatiškai prideda „self“. Tai yra ypatingas raktinis žodis ir leiskite prie jo netrukus grįžti. Ant terminalo atspausdinkime „move“.
print("move")
Apibrėžkime kitą metodą, pvz., „piešti“ ir atsispausdinkime jį terminale.
def draw(self):
print("draw")
Baigėme savo „taško“ klasės apibrėžimą. Su šiuo nauju tipu galime kurti naujus objektus. Klasė tiesiog apibrėžia projektą arba šabloną objektams, kurie yra tikri egzemplioriai, pagrįsti tuo projektu. Norėdami sukurti objektą, įvedami savo klasės pavadinimą ir iškviečiame jį kaip funkciją. Tai sukuria naują objektą ir grąžina jį. Tada mes galime saugoti tą objektą kintamajame. Leiskite man parodyti jums:
Čia mes apibrėžėme „tašką1“, kuris yra trimatis taškas. Matote, kad terminale galime atsispausdinti atskiras koordinates.
Su šiuo tašku galime naudoti du metodus „piešti“ ir „judinti“.
Taigi, apibendrinant, mes naudojame klases, kad apibrėžtume naujus tipus ir šie tipai gali turėti metodus, kuriuos apibrėžiame klasės turinyje. Klasės gali turėti atributus, kuriuos galime nustatyti bet kur savo programose.
Konstruktoriai
Iki šiol mes išmokome kurti naujus tipus naudodami klases. Dabar yra nedidelė šio įgyvendinimo problema. Naudodami klases galime sukurti taškinį objektą be x arba y koordinačių ir tai nėra idealu. Leiskite man parodyti jums.
Sukurkime tašką ir atspausdinkime jį prieš nustatydami x koordinatę. Vykdant programą atsiranda tokia atributo klaida:
Tai reiškia, kad taškinis objektas neturi atributo, vadinamo x. Dabar problema ta, kad galima turėti taškinį objektą be x arba y koordinačių. Tai neturi prasmės, nes kai kalbame apie tašką, turime žinoti, kur tas taškas yra. Norėdami išspręsti šią problemą, naudojame konstruktorių. Konstruktorius yra funkcija, kuri iškviečiama kuriant objektą.
Štai kaip mes naudojame konstruktorių. Pirma, perduokime x ir y koordinačių reikšmes aukščiau pateiktoje programoje.
point = Point(10, 20)
print(point.x)
Dabar šioje klasėje turime pridėti specialų metodą, vadinamą konstruktoriumi. Jo sintaksė yra tokia:
def __init__(self, x, y):
init
yra inicializuotas trumpinys, ir tai yra funkcija arba metodas, kuris iškviečiamas, kai sukuriamas naujas taškinis objektas. X ir y pridedami iškart po to self
pridėti du papildomus parametrus.
Po to turėtume susieti x ir y su gautomis reikšmėmis, ty 10 ir 20
self.x = x
self.y = y
Mes naudojame self
Norėdami nurodyti dabartinį objektą, tada atributą x nustatome į x argumentą, perduotą funkcijai „x“. Tokiu būdu, naudojant init
metodu, galime inicijuoti savo objektus. Šis metodas vadinamas konstruktoriumi. Paleiskite savo programą.
Dabar galime vėliau pakeisti x ir y koordinates. Atnaujinkime x koordinates:
point = Point(10, 20)
point.x = 11
print(point.x)
Dabar x koordinatė atnaujinta į 11 reikšmę.
Naudotis
Štai jums įdomus pratimas.
Noriu, kad apibrėžtumėte naują tipą, vadinamą asmeniu. Šie „asmens“ objektai turi turėti „name
“ atributas, taip pat „talk()
“Metodas.
Tai paprasta užduotis ir neturėtų trukti ilgiau nei kelias minutes.
Sprendimas
Pradėkite nuo klasės „Asmuo“ apibrėžimo taip:
class Person:
self.name = name
Konstruktorių apibūdinsime vėliau. Dabar galime sukurti objektą „Asmuo“. Pavadinkime jį Jonu
john = Person("John Smith")
print(john.name)
john.talk()
Dabar pereikite prie pirmosios kodo dalies ir sukurkite konstruktorių.
def __init__(self, name):
Galutinis kodas atrodys taip:
Taip pat galite naudoti suformatuotas eilutes ir kitas sąvokas kartu su klasėmis ir konstruktoriais.
Paveldėjimai
Paveldėjimas yra dar viena sąvoka, susijusi su klasėmis, leidžiančiomis pakartotinai naudoti kodą.
Apsvarstykite šią kodo dalį.
class Dog:
def walk(self):
print("walk")
Sukūrėme klasę „Šuo“ su „vaikščiojimo“ metodu. Taikydami šį metodą, mes tiesiog spausdiname ėjimo pranešimą terminale. Tarkime, tikroje programoje yra 10 kodo eilučių, o ne viena eilutė. Ateityje, jei reikės kitos klasės, kad būtų naudojamas „vaikščiojimo“ metodas, turėsime pakartoti visą tą kodą. Tai nėra idealu.
Programavime turime principą, vadinamą DRY, kuris yra trumpinys „nekartok“. Tarkime, kažkada ateityje aptiksime problemą, susijusią su mūsų „vaikščiojimo“ metodu, ir jei mes kartojome arba dubliavome šį metodą daugelyje kitų vietų, turėsime grįžti ir išspręsti šią problemą kiekvienoje vietoje, kur tai dubliavome. kodas. Štai kodėl programuodami neturėtume ką nors apibrėžti du kartus.
Yra įvairių būdų, kaip išspręsti šią problemą, tačiau čia mes išmoksime tą, kuris pradedantiesiems yra lengvesnis ir vadinamas paveldėjimu. Tokiu atveju sukursime kitą klasę „žinduolis“ ir apibrėžsime savo „vaikščiojimo“ atributą toje klasėje.
class Mammal:
def walk(self):
print("walk")
Apibrėžę savo „Mammal“ klasę, galime naudoti paveldėjimą, kad perduotume tokius atributus:
Tiek šunų, tiek kačių klasės paveldi visus klasės metodus, apibrėžtus jų pagrindinėje klasėje. Dabar galime pridėti metodų, būdingų šunims, pavyzdžiui:
class Dog:
def bark(self):
print("bark")
Užbaikite!
Tai buvo viskas apie klases, konstruktorius ir pakartotinį kodo naudojimą klasėse su paveldėjimo sąvokomis. Dabar artėjame prie savo serijos pabaigos. Šiuo metu jūs turėtumėte sugebėti sukurti gerus, skaitomus ir glaustus kodus Python.
Modulių ir paketų sampratą pamatysime kitoje paskaitoje.
Palikti atsakymą