Programarea în Python

Acest conținut face parte din seria:

Aveți grijă de articole noi din această serie.

Continuăm să studiem clasele în Python. Modurile speciale rezervate aici au un prefix - un caracter dublu de subliniere. Cu ajutorul lor, mecanisme implementate, cum ar fi constructori, secvențe, iteratori, controale, sloturi etc.







Astăzi vom lua în considerare următoarele subiecte.

  1. Obiecte clasice și metode speciale.
  2. Exemple de clase și metode speciale.
  3. Exemple de clase ca secvențe.
  4. Aduce obiecte la tipurile de bază.
  5. Metode legate și nelegate.
  6. Metoda super.
  7. Metode statice.
  8. Iterator.
  9. Proprietatea.
  10. Singleton.
  11. Sloturi.
  12. Functorul.
  13. Descriptor.
  14. Secvență.

1. Obiecte de clasă și metode speciale

O clasă de obiecte este creată utilizând o definiție de clasă. Obiectele de clasă au următoarele atribute:

__name__ este numele clasei;

__module__ - numele modulului;

__dict__ este dicționarul atributelor de clasă, puteți schimba acest dicționar în mod direct;

__bases__ - o tuplă de clase de bază în ordinea în care urmează;

__doc__ este șirul de documentare a clasei.

2. Exemple de clase și metode speciale

Exemplul (instanța) clasei este returnat atunci când este apelat obiectul de clasă. Obiectul clasei poate fi unul, există mai multe instanțe (sau instanțe). Instanțele au următoarele atribute:

__dict__ este dicționarul atributelor de clasă, puteți schimba acest dicționar în mod direct;

__class__ este o clasă de obiecte, din care această instanță este o instanță;

__init__ este un constructor. Dacă există un constructor în clasa de bază, constructorul clasei derivate trebuie să îl numească;

__del__ este un distrugător. Dacă există un distrugător în clasa de bază, distrugătorul clasei derivate trebuie să o numească;

__cmp__ - se cere pentru toate operațiile de comparație;

__hash__ - returnează valoarea hash a obiectului, egală cu numărul de 32 de biți;

__getattr__ - returnează un atribut care nu este disponibil în modul obișnuit;

__setattr__ - atribuie o valoare de atribut;

__delattr__ - elimină atributul;

__call__ - declanșat atunci când este apelată o instanță a unei clase.

3. Exemple de clase ca secvențe

Exemple de clase pot fi folosite pentru a emula secvențe. Pentru această implementare, există metode integrate:

__len__ - returnează lungimea secvenței;

__getitem__ - obțineți elementul prin index sau cheie;

__setitem__ - asignarea unui element cu această cheie sau index;

__delitem__ - ștergerea unui element cu această cheie sau index;

__getslice__ - returnează o secvență imbricată;

__setslice__ - înlocuiește secvența imbricată;

__delslice__ - elimină secvența imbricată;

__contains__ - implementează operatorul.







4. Aducerea obiectelor la tipurile de bază

Obiectele de clasă pot fi exprimate într-un șir sau tip numeric.

__repr__ - returnează o reprezentare oficială a șirului obiectului;

__str__ - returnează o reprezentare de șir a obiectului;

__oct__. __hex__. __complex__. __int__. __long__. __float__ - returnați o reprezentare a șirului în sistemul numeric corespunzător.

5. Metode legate și nelegate

Să luăm în considerare un exemplu concret. Există o clasă de bază Cat și există o clasă derivată Barsik:

Creăm o instanță a clasei derivate:

La prima vedere - o greșeală ciudată, deoarece atributul flămând este în clasa de bază. De fapt, constructorul de clasă derivată este supraîncărcat, dar constructorul de clasă de bază nu este chemat și trebuie apelat în mod explicit. Acest lucru se poate face în două moduri. Prima opțiune este considerată depășită:

6. Metoda super

A doua opțiune: la începutul programului trebuie să definiți o metaclase. care indică faptul că clasa este implementată în așa-numitul stil nou - stil nou. Apoi trebuie să apelați metoda super standard pentru constructorul de bază:

7. Metode statice

O metodă statică este o funcție definită în afara clasei și care nu are atributul auto:

O metodă statică poate fi de asemenea definită într-o clasă - cuvântul cheie staticmethod este folosit pentru aceasta. iar metoda poate fi apelată fie în mod static, fie printr-o instanță:

Metodele de clasă sunt definite folosind cuvântul cheie classmethod - aici, în mod automat, python trece primul clasa (cls) ca prim parametru:

8. Iterator

Iteratoarele sunt bune acolo, unde listele nu sunt potrivite datorită faptului că acestea ocupă o mulțime de memorie, iar iteratorul returnează valoarea specifică. În clasă, trebuie să definiți două metode standard - __iter__ și următorul. Metoda __iter__ va returna obiectul prin următoarea metodă:

Iteratorul poate fi convertit în listă:

9. Proprietatea

Proprietate - atributul clasei returnat prin proprietatea funcției standard, care ia ca argumente alte funcții ale clasei:

10. Singleton

Acest model vă permite să creați doar o instanță pentru clasă. Se folosește metoda __new__:

Sloturile sunt o listă de atribute care sunt specificate în antetul de clasă folosind __slots__. În instanță, trebuie să atribuiți un atribut înainte de al utiliza:

12. Functorul

Un functor este o clasă care are metoda __call__ - obiectul poate fi numit ca o funcție.

Un exemplu. Să presupunem că avem clasa Persoană, există o colecție de obiecte din această clasă - oameni, trebuie să sortăm această colecție după nume. Pentru a face acest lucru, puteți utiliza functorul Sortkey:

13. Descriptor

Un descriptor este o clasă care stochează și controlează atributele altor clase. În general, orice clasă care implementează una dintre metodele speciale este __get__. __set__. __delete__. este un descriptor.

În acest caz, clasa Point nu are propriile atribute x, y, deși le numește ca și cum ar fi ele - de fapt ele sunt stocate în descriptorul ExternalStorage.

14. Secvență

Secvența este implementată folosind metodele __getitem__. __setitem__. În acest exemplu, clasa MySequence returnează un element dintr-o secvență de lungime nedeterminată, care este o evoluție aritmetică a formei: 1 3 5 7. Metodele standard __del__ nu pot fi folosite aici. __len__:

concluzie

Astăzi am aflat că clasele din Python au un set mare de metode și atribute încorporate care vă permit să utilizați în mod flexibil modelul de programare orientat pe obiect și să simplificați soluția de sarcini și algoritmi standard. Metodele pot fi statice în funcție de natura obiectului, care vă permite să amestecați arhitectura orientată pe obiecte și funcționale. Apelarea metodelor clasei de bază are o semantică proprie. Secvențele și cartografiile, implementate pe baza iteratorilor, economisesc resurse și memorie. Proprietățile simplifică implementarea complexă a atributelor de clasă. Funcționarii se ocupă de o colecție de obiecte definite de utilizator, ca și cum ar fi tipuri standard. Descriptorii implementează o logică diferită pentru stocarea atributelor de clasă. În continuarea ciclului, vă voi arăta cum să lucrați cu sistemul de fișiere folosind Python.

Codul exemplelor a fost testat pe versiunea python 2.6.

Descărcați resurse







Articole similare

Trimiteți-le prietenilor: