MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Clasa object

Reprezentarea textuală a obiectului

Începând cu versiunea 3, în limbajul de programare Python toate clasele au implicit o superclasă comună - object și toate clasele moștenesc implicit metodele acesteia.

Una dintre cele mai utilizate metode ale clasei object este metoda __str__(). Când este necesar să obținem o reprezentare textuală a unui obiect sau să afișăm un obiect sub forma unui șir de caractere, Python invocă această metodă. La definirea unei clase, este considerată o bună practică suprascrierea acestei metode.

De exemplu, să luăm clasa Person și să afișăm reprezentarea textuală a acesteia:

class Person:
   def __init__(self, name, age):
       self.name = name  # setăm numele
       self.age = age  # setăm vârsta

   def display_info(self):
       print(f"Name: {self.name}  Age: {self.age}")

tom = Person("Tom", 23)
print(tom)

La rulare, programul va afișa ceva de genul:

<__main__.Person object at 0x10a63dc00>

Aceasta nu este o informație foarte informativă despre obiect. Desigur, putem rezolva problema definind în clasa Person o metodă suplimentară care să afișeze datele obiectului - în exemplul de mai sus aceasta este metoda display_info.

Dar există și o altă soluție - să definim în clasa Person metoda __str__() (cu două liniuțe de subliniere pe fiecare parte):

class Person:
   def __init__(self, name, age):
       self.name = name  # setăm numele
       self.age = age  # setăm vârsta

   def display_info(self):
       print(self)
       # print(self.__str__())  # sau așa

   def __str__(self):
       return f"Name: {self.name}  Age: {self.age}"

tom = Person("Tom", 23)
print(tom)  # Name: Tom  Age: 23
tom.display_info()  # Name: Tom  Age: 23

Metoda __str__ trebuie să returneze un șir de caractere. În acest caz, returnăm informațiile de bază despre persoană. Dacă avem nevoie să folosim aceste informații în alte metode ale clasei, putem folosi expresia self.__str__().

Iar acum, ieșirea în consolă va fi diferită:

Name: Tom  Age: 23 
Name: Tom  Age: 23
← Lecția anterioară Lecția următoare →