Anatomia della classe: il costruttore __init__

Programmazione orientata agli oggetti in Python

Alex Yarosh

Content Quality Analyst @ DataCamp

Metodi e attributi

  • I metodi sono funzioni definite all'interno di una classe
  • self come primo argomento
  • Definisci attributi tramite assegnazione
  • Riferisciti agli attributi nella classe tramite self.___

   

class MyClass:
    # definizione di funzione nella classe
    # primo argomento è self
    def my_method1(self, other_args...):
        # fai cose qui

    def my_method2(self, my_attr):        
        # attributo creato tramite assegnazione
        self.my_attr = my_attr
        ...
Programmazione orientata agli oggetti in Python

Costruttore

  • Aggiungi dati all'oggetto quando lo crei?
  • Costruttore: il metodo __init__() viene chiamato ogni volta che un oggetto è creato.
class Customer:
       def __init__(self, name):     
        self.name = name           # <--- Crea l'attributo .name e assegnalo al parametro name
        print("Il metodo __init__ è stato chiamato")

cust = Customer("Lara de Silva") #<--- __init__ è chiamato implicitamente print(cust.name)
Il metodo __init__ è stato chiamato
Lara de Silva
Programmazione orientata agli oggetti in Python
class Customer:
       def __init__(self, name, balance):  # <-- parametro balance aggiunto

self.name = name self.balance = balance # <-- attributo balance aggiunto print("Il metodo __init__ è stato chiamato")
cust = Customer("Lara de Silva", 1000) # <-- __init__ è chiamato print(cust.name) print(cust.balance)
Il metodo __init__ è stato chiamato
Lara de Silva
1000
Programmazione orientata agli oggetti in Python
class Customer:
       def __init__(self, name, balance=0):  #<--imposta valore predefinito per balance

self.name = name self.balance = balance print("Il metodo __init__ è stato chiamato")
cust = Customer("Lara de Silva") # <-- non specificare esplicitamente balance
print(cust.name) print(cust.balance) # <-- attributo creato comunque
Il metodo __init__ è stato chiamato
Lara de Silva
0
Programmazione orientata agli oggetti in Python

Attributi nei metodi

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 creato
obj.my_method2(val2) # <-- attr2 creato

Attributi nel costruttore

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

# Tutti gli attributi sono creati obj = MyClass(val1, val2)
  • più facile sapere tutti gli attributi
  • attributi creati quando l'oggetto è creato
  • codice più usabile e manutenibile
Programmazione orientata agli oggetti in Python

Buone pratiche

1. Inizializza gli attributi in __init__()
Programmazione orientata agli oggetti in Python

Buone pratiche

1. Inizializza gli attributi in __init__()
2. Nomenclatura

CamelCase per le classi, lower_snake_case per funzioni e attributi

Programmazione orientata agli oggetti in Python

Buone pratiche

1. Inizializza gli attributi in __init__()
2. Nomenclatura

CamelCase per le classi, lower_snake_case per funzioni e attributi

3. Mantieni self come self
class MyClass:
    # Funziona ma non è consigliato
    def my_method(kitty, attr):
       kitty.attr = attr
Programmazione orientata agli oggetti in Python

Buone pratiche

1. Inizializza gli attributi in __init__()
2. Nomenclatura

CamelCase per le classi, lower_snake_case per funzioni e attributi

3. self è self
4. Usa i docstring
class MyClass:
    """Questa classe non fa nulla"""
    pass
Programmazione orientata agli oggetti in Python

Facciamo pratica!

Programmazione orientata agli oggetti in Python

Preparing Video For Download...