Anatomia clasei: constructorul __init__

Programare orientată pe obiecte în Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Metode și atribute

  • Metodele sunt definiții de funcții în cadrul unei clase
  • self ca prim argument
  • Definiți atributele prin atribuire
  • Referați atributele clasei prin self.___

   

class MyClass:
    # function definition in class
    # first argument is self
    def my_method1(self, other_args...):
        # do things here

    def my_method2(self, my_attr):        
        # attribute created by assignment
        self.my_attr = my_attr
        ...
Programare orientată pe obiecte în Python

Constructor

  • Cum adăugăm date unui obiect la creare?
  • Metoda constructor __init__() este apelată la fiecare creare de obiect.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Creează atributul .name și îl setează la parametrul name
        print("The __init__ method was called")

cust = Customer("Lara de Silva") #<--- __init__ este apelat implicit print(cust.name)
The __init__ method was called
Lara de Silva
Programare orientată pe obiecte în Python
class Customer:
       def __init__(self, name, balance):  # <-- parametru balance adăugat

self.name = name self.balance = balance # <-- atribut balance adăugat print("The __init__ method was called")
cust = Customer("Lara de Silva", 1000) # <-- __init__ este apelat print(cust.name) print(cust.balance)
The __init__ method was called
Lara de Silva
1000
Programare orientată pe obiecte în Python
class Customer:
       def __init__(self, name, balance=0):  #<--valoare implicită pentru balance

self.name = name self.balance = balance print("The __init__ method was called")
cust = Customer("Lara de Silva") # <-- balance nu este specificat explicit
print(cust.name) print(cust.balance) # <-- atributul este creat oricum
The __init__ method was called
Lara de Silva
0
Programare orientată pe obiecte în Python

Atribute în metode

class MyClass:
    def my_method1(self, attr1):
        self.attr1 = attr1
        ...

    def my_method2(self, attr2):        
        self.attr2 = attr2
        ...
obj = MyClass()
obj.my_method1(val1) # <-- attr1 creat
obj.my_method2(val2) # <-- attr2 creat

Atribute în constructor

class MyClass:
    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2
        ...

# Toate atributele sunt create obj = MyClass(val1, val2)
  • mai ușor de identificat toate atributele
  • atributele sunt create odată cu obiectul
  • cod mai ușor de utilizat și întreținut
Programare orientată pe obiecte în Python

Bune practici

1. Inițializați atributele în __init__()
Programare orientată pe obiecte în Python

Bune practici

1. Inițializați atributele în __init__()
2. Denumire

CamelCase pentru clase, lower_snake_case pentru funcții și atribute

Programare orientată pe obiecte în Python

Bune practici

1. Inițializați atributele în __init__()
2. Denumire

CamelCase pentru clase, lower_snake_case pentru funcții și atribute

3. Păstrați self ca self
class MyClass:
    # Funcționează, dar nu este recomandat
    def my_method(kitty, attr):
       kitty.attr = attr
Programare orientată pe obiecte în Python

Bune practici

1. Inițializați atributele în __init__()
2. Denumire

CamelCase pentru clase, lower_snake_case pentru funcții și atribute

3. self rămâne self
4. Utilizați docstring-uri
class MyClass:
    """This class does nothing"""
    pass
Programare orientată pe obiecte în Python

Să exersăm!

Programare orientată pe obiecte în Python

Preparing Video For Download...