Attributi di classe vs. di istanza

Introduzione alla programmazione orientata agli oggetti in Python

George Boorman

Curriculum Manager, DataCamp

Principi fondamentali della POO

Incapsulamento:

  • Raggruppamento di dati e metodi

Ereditarietà:

  • Estendere la funzionalità del codice esistente

Polimorfismo:

  • Creazione di un'interfaccia unificata
Introduzione alla programmazione orientata agli oggetti in Python

Attributi a livello di istanza

class Employee:
    def __init__(self, name, salary):
        self.name = name
        self.salary = salary

emp1 = Employee("Teo Mille", 50000) 
emp2 = Employee("Marta Popov", 65000)
  • I valori di name e salary sono specifici per ogni oggetto
  • self assegna a un oggetto
Introduzione alla programmazione orientata agli oggetti in Python

Attributi a livello di classe

  • Dati condivisi tra tutte le istanze di una classe
  • Definire gli attributi di classe nel corpo di class
  • "Variabile globale" all'interno della classe
Introduzione alla programmazione orientata agli oggetti in Python

Implementazione degli attributi a livello di classe

class Employee:
    # Define a class attribute
    # No self. syntax
    MIN_SALARY = 30000 

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary
else: self.salary = Employee.MIN_SALARY
  • MIN_SALARY è condiviso tra tutte le istanze
  • Non usare self per definire l'attributo di classe
  • La convenzione è usare lettere maiuscole
  • Usa ClassName.ATTR_NAME per accedere al valore dell'attributo della classe
Introduzione alla programmazione orientata agli oggetti in Python

Attributi a livello di classe

class Employee:
    # Define a class attribute
    MIN_SALARY = 30000    

def __init__(self, name, salary): self.name = name # Use class name # to access class attribute if salary >= Employee.MIN_SALARY: self.salary = salary else: self.salary = Employee.MIN_SALARY
emp1 = Employee("John", 40000)
print(emp1.MIN_SALARY)
30000
emp2 = Employee("Jane", 60000)
print(emp2.MIN_SALARY)
30000
Introduzione alla programmazione orientata agli oggetti in Python

Modifica degli attributi a livello di classe

emp1 = Employee("John", 40000)
emp2 = Employee("Jane", 60000)

# Update MIN_SALARY of emp1 emp1.MIN_SALARY = 50000
# Print MIN_SALARY for both employees print(emp1.MIN_SALARY) print(emp2.MIN_SALARY)
50000
30000
Introduzione alla programmazione orientata agli oggetti in Python

Modifica degli attributi a livello di classe

  • MIN_SALARY è creato nella definizione della classe
  • L’aggiornamento di MIN_SALARY di un oggetto non influirà sul valore nella definizione della classe
  • Sicurezza - impedire modifiche al software!
Introduzione alla programmazione orientata agli oggetti in Python

Perché usare gli attributi di classe?

Costanti globali relative alla classe
  • Valori minimi e massimi per gli attributi
    • Impedisci dati non validi
  • Valori e costanti comunemente usati, ad es. host, port per una classe Database
    • Evita la ripetizione quando crei oggetti
Introduzione alla programmazione orientata agli oggetti in Python

Passiamo alla pratica!

Introduzione alla programmazione orientata agli oggetti in Python

Preparing Video For Download...