Clase și obiecte Python (cu exemple)

În acest tutorial, veți afla despre funcționalitatea de bază a obiectelor și claselor Python. Veți afla ce este o clasă, cum să o creați și să o utilizați în programul dvs.

Video: clase și obiecte Python

Obiecte și clase Python

Python este un limbaj de programare orientat pe obiecte. Spre deosebire de programarea orientată pe proceduri, unde accentul principal este pus pe funcții, programarea orientată pe obiecte subliniază obiectele.

Un obiect este pur și simplu o colecție de date (variabile) și metode (funcții) care acționează asupra acelor date. În mod similar, o clasă este un plan pentru acel obiect.

Ne putem gândi la clasă ca la o schiță (prototip) a unei case. Conține toate detaliile despre podele, uși, ferestre etc. Pe baza acestor descrieri construim casa. Casa este obiectul.

Deoarece multe case pot fi realizate din schema unei case, putem crea multe obiecte dintr-o clasă. Un obiect este, de asemenea, numit o instanță a unei clase și procesul de creare a acestui obiect se numește instanțiere .

Definirea unei clase în Python

La fel ca definițiile funcției încep cu cuvântul cheie def în Python, definițiile de clasă încep cu un cuvânt cheie de clasă.

Primul șir din clasă se numește docstring și are o scurtă descriere despre clasă. Deși nu este obligatoriu, acest lucru este foarte recomandat.

Iată o definiție simplă a clasei.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

O clasă creează un nou spațiu de nume local în care sunt definite toate atributele sale. Atributele pot fi date sau funcții.

Există, de asemenea, atribute speciale care încep cu subliniere duble __. De exemplu, __doc__ne oferă docstringul clasei respective.

De îndată ce definim o clasă, se creează un nou obiect de clasă cu același nume. Acest obiect de clasă ne permite să accesăm diferitele atribute, precum și să instanțiem obiecte noi din acea clasă.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Ieșire

 10 Aceasta este o clasă de persoană

Crearea unui obiect în Python

Am văzut că obiectul clasei poate fi folosit pentru a accesa diferite atribute.

De asemenea, poate fi folosit pentru a crea noi instanțe de obiect (instanțierea) acelei clase. Procedura de creare a unui obiect este similară cu un apel funcțional.

 >>> harry = Person()

Aceasta va crea o nouă instanță de obiect numită Harry. Putem accesa atributele obiectelor folosind prefixul numelui obiectului.

Atributele pot fi date sau metode. Metodele unui obiect sunt funcții corespunzătoare ale acelei clase.

Acest lucru înseamnă să spunem, deoarece Person.greeteste un obiect funcțional (atributul clasei), Person.greetva fi un obiect metodă.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Ieșire

  Buna ziua 

Este posibil să fi observat selfparametrul în definiția funcției din clasă, dar am apelat metoda pur și simplu, harry.greet()fără niciun argument. Încă a funcționat.

Acest lucru se datorează faptului că, ori de câte ori un obiect își apelează metoda, obiectul în sine este trecut ca primul argument. Deci, se harry.greet()traduce în Person.greet(harry).

În general, apelarea unei metode cu o listă de n argumente este echivalentă cu apelarea funcției corespunzătoare cu o listă de argumente care este creată prin inserarea obiectului metodei înainte de primul argument.

Din aceste motive, primul argument al funcției din clasă trebuie să fie obiectul în sine. Aceasta se numește în mod convențional sine. Poate fi numit altfel, dar vă recomandăm să urmați convenția.

Acum trebuie să fiți familiarizați cu obiectul clasei, obiectul instanță, obiectul funcțional, obiectul metodă și diferențele lor.

Constructori în Python

Funcțiile de clasă care încep cu subliniere dublă __se numesc funcții speciale, deoarece au o semnificație specială.

Un interes particular este __init__()funcția. Această funcție specială este apelată ori de câte ori este instanțiat un nou obiect din acea clasă.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Orice atribut al unui obiect poate fi șters oricând, folosind delinstrucțiunea. Încercați următoarele pe shell-ul Python pentru a vedea rezultatul.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Putem chiar șterge obiectul în sine, folosind declarația del.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

De fapt, este mai complicat de atât. Când o facem c1 = ComplexNumber(1,3), un nou obiect de instanță este creat în memorie și numele c1 se leagă de acesta.

La comandă del c1, această legare este eliminată și numele c1 este șters din spațiul de nume corespunzător. Cu toate acestea, obiectul continuă să existe în memorie și, dacă nu i se leagă alt nume, acesta va fi distrus automat mai târziu.

Această distrugere automată a obiectelor neriferențiate din Python este numită și colectarea gunoiului.

Ștergerea obiectelor din Python elimină legarea numelui

Articole interesante...