Programmazione orientata agli oggetti in Python
Alex Yarosh
Content Quality Analyst @ DataCamp
class Employee: def set_name(self, name): self.name = name def set_salary(self, salary): self.salary = salary def give_raise(self, amount): self.salary = self.salary + amountdef __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Usa la sintassi a punto e = per modificare gli attributi
emp.salary = emp.salary + 5000
class Employee: def set_name(self, name): self.name = name def set_salary(self, salary): self.salary = salary def give_raise(self, amount): self.salary = self.salary + amountdef __init__(self, name, salary): self.name, self.salary = name, salary
emp = Employee("Miriam Azari", 35000)
# Usa la sintassi a punto e = per modificare gli attributi
emp.salary = emp.salary + 5000
set_salary() non impedirebbe emp.salary = -100import pandas as pd
df = pd.DataFrame({"colA": [1,2], "colB":[3,4]})
df
colA colB
0 1 3
1 2 4
df.columns = ["new_colA", "new_colB"]
df
new_colA new_colB
0 1 3
1 2 4
# causerà un errore
df.columns = ["new_colA", "new_colB", "extra"]
df
ValueError: Lunghezza non corrispondente:
L'asse previsto ha 2 elementi,
i nuovi valori hanno 3 elementi
df.shape = (43, 27)
df
AttributeError: impossibile impostare l'attributo
class Employer: def __init__(self, name, new_salary): self._salary = new_salary@property def salary(self): return self._salary@salary.setter def salary(self, new_salary):if new_salary < 0: raise ValueError("Stipendio non valido") self._salary = new_salary
← Usa un attributo "protetto" con _ iniziale per memorizzare i dati
← Usa @property su un metodo il cui nome è esattamente quello dell'attributo limitato; restituisci l'attributo interno
← Usa @attr.setter su un metodo attr() che verrà chiamato su obj.attr = valore
class Employer: def __init__(self, name, new_salary): self._salary = new_salary@property def salary(self): return self._salary@salary.setter def salary(self, new_salary): if new_salary < 0: raise ValueError("Stipendio non valido") self._salary = new_salary
emp = Employee("Miriam Azari", 35000)
# accesso alla "proprietà"
emp.salary
35000
emp.salary = 60000 # <-- @salary.setter
emp.salary = -1000
ValueError: Stipendio non valido
$$\text{\Large{Per l'utente: si comportano come attributi}}$$
$$\text{\Large{Per lo sviluppatore: controllo sull'accesso}}$$
→ Non aggiungere @attr.setter
Crea una proprietà di sola lettura
→ Aggiungi @attr.getter
Usa per il metodo chiamato quando il valore della proprietà viene recuperato
→ Aggiungi @attr.deleter
Usa per il metodo chiamato quando la proprietà viene eliminata usando del
Programmazione orientata agli oggetti in Python