Un refresher Smooth pentru clasele și obiectele Python

Python vine cu multe tipuri de date încorporate, cum ar fi dict, listă, set, etc. V-ați întrebat vreodată dacă puteți crea propriile tipuri de date? Ca persoană, mașină, universitate, etc? Ar fi posibilă crearea unor astfel de tipuri de date? Da, acest lucru este cu siguranță posibil în Python, și aici intră în joc clasele și obiectele.

În acest tutorial, voi descrie ce se înțelege prin a clasă si un obiect, și cum putem lucra cu ei în Python.

Clase și obiecte

După cum sa menționat mai sus, clasele și obiectele vizează crearea tipului de date proprii (adică tipurile de date definite de utilizator). A clasă este astfel un tip de date definit de utilizator și crearea instanțelor unei clase (instanțiere) înseamnă crearea obiecte de acest tip. La sfârșitul zilei, clasele și obiectele sunt considerate blocurile principale pentru Python, care este un limbaj de programare orientat pe obiecte.

Cum ar fi să creați o clasă în Python? Cea mai simplă structură de clasă din Python arată după cum urmează:

ClassName: declarații

După cum puteți vedea, definirea unei clase începe cu clasă cuvânt cheie și numele clasei este numele clasei (identificatorul). Rețineți că numele clasei urmează aceleași reguli ca și numele de variabile din Python, adică numele poate începe numai cu o literă sau cu un subliniere _, și pot conține numai litere, numere. sau sublinieri. De asemenea, referindu-ne la PEP 8 (Ghid de stil pentru Python Code), putem vedea că este recomandat să numim clase în CapWords (stilul superior CamelCase).

Să definim acum o clasă Persoană, care în prezent nu va conține nimic, cu excepția trece afirmație. După cum se menționează în documentația Python:

 trece declarația nu face nimic. Acesta poate fi folosit atunci când o declarație este cerută sintactic, dar programul nu necesită nicio acțiune
clasa Persoană: treci

Pentru a crea o instanță (obiect) din această clasă, putem face pur și simplu următoarele:

abder = Persoană ()

Aceasta înseamnă că am creat un obiect nou abder de tip Persoană. Observați că crearea unui obiect are pur și simplu numele clasei urmat de paranteze.

Putem identifica ce tip abder este, și unde aparține în memorie prin tastarea: imprimare abder. În acest caz, veți obține ceva de genul:

<__main__.Person instance at 0x109a1cb48>

atribute

Atributele sunt ca proprietățile pe care vrem să le adăugăm la clasă (tip). De exemplu, pentru clasa Persoanei noastre, să adăugăm două atribute: Nume și şcoală, după cum urmează:

clasa Persoana: name = "school ="

Acum, putem crea un nou obiect de tip Persoană (instanță a Persoanei) cu mai multe detalii, deoarece are acum câteva atribute, după cum urmează:

abder = Persoană () abder.name = 'Abder' abder.school = 'Universitatea ABC'

metode

Metodele sunt ca și funcții în Python, în sensul că acestea sunt definite cu cuvântul cheie def și au aceeași formatare ca și funcțiile. În clasa noastră, să definim o metodă care imprimă numele și școala persoanei. Clasa va arata dupa cum urmeaza:

clasa Persoana: name = "school =" def print_name (auto): print auto.name def print_school (auto): print self.school abder = Persoană () abder.name = 'Abder' abder.school = .print_name () abder.print_school ()

Am menționat mai sus că metodele sunt ca și funcții. Dar principala diferență este că metodele trebuie să aibă un argument denumit convenabil de sine, care se referă la obiectul pe care se solicită metoda (adică abder). Observați că nu suntem nevoiți să trecem la chemarea metodei de sine ca argument, deoarece Python se va ocupa de asta pentru noi.

Dacă nu o punem de sine ca argument în printeaza numele(), iată cum se va plânge Python:

Trasare (ultimul apel ultimul): Fișierul "test.py", linia 14, în  abder.print_name () TypeError: print_name () nu ia argumente (1 dată)

Puteți, bineînțeles, să treceți mai mult de un argument în această metodă. Să facem procesul de imprimare Nume și şcoală într-o metodă, după cum urmează:

clasa Persoană: name = "school =" def print_information (auto, nume, școală): print self.name print auto.school abder = Persoană abder.name = 'Abder' abder.school = 'XY University' abder.print_information (abder.name, abder.school) 

Încercați și rulați programul - ați obținut aceeași ieșire ca înainte?

Inițializarea

În secțiunea anterioară, am inițializat Nume și şcoală oferindu-le o valoare goală ". Dar există un mod mai elegant de inițializare a variabilelor la valorile implicite, și aici este locul unde iniţializarea vine la îndemână.

Initializatorul este o metoda speciala cu numele __init__ (metoda este considerată specială și va fi tratată într-un caz special și de aceea există dublu subliniere la început și la sfârșit).

Să modificăm programul anterior pentru a folosi inițializatorul. În acest caz, programul va arăta după cum urmează:

__init __ (auto, n, s): self.name = n self.school = s def nume_principal (auto): print self.name def print_school (self): print self.school abder = , "Universitatea XY") abder.print_name () abder.print_school ()

Observați că inițializatorul trebuie să aibă două argumente. De exemplu, dacă nu includeți n argument în inițializator, vom obține următoarea eroare:

Traceback (ultimul apel ultimul): Fișierul "test.py", linia 12, în  abder = Persoana (Abder, Universitatea XY) TypeError: __init __ () ia exact 2 argumente (3 date)

Deci, linia de jos este cu asta clase veți putea crea propriile tipuri de date și cu obiecte veți putea crea instanțe ale acelor tipuri de date. Clasele sunt de asemenea compuse din atribute (proprietăți) și metode care sunt acțiunile pe care le îndeplinim pe aceste atribute.

Care a fost tipul de date pe care ați dorit dintotdeauna să îl creați? Mergeți și faceți-o!

Cod