Programmazione a oggetti intermedia in Python
Jake Roach
Data Engineer
class Student:
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn
# Crea un oggetto student e accedi all'attributo "ssn"
shaw = Student("Daniel Shaw", "193-80-1821")
print(shaw.ssn)
# E se il valore cambia o viene eliminato? Come gestirlo?
193-80-1821
I descrittori sono oggetti usati per regolare come un attributo viene letto, impostato o eliminato
Crea descrittori con @property
Si possono creare descrittori anche con…
property()__get__(), __set__(), __delete__()$$
class Student:
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn
@property
def ssn(self):
return "XXX-XX-" + self._ssn[-4:]
@ssn.setter
def ssn(self, new_ssn):
self._ssn = new_ssn
@ssn.deleter
def ssn(self):
raise AttributeError("Can't delete SSN")
class Student:
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn # Non serve il trattino basso
@property
def ssn(self): # Questo è il metodo "getter"
return "XXX-XX-" + self._ssn[-4:]
ssnself._ssn, non con self.ssnclass Student:
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn
...
@ssn.setter
def ssn(self, new_ssn):
if len(new_ssn) == 11:
# Aggiungi elementi come convalida dei dati
# operazioni su altri attributi, ecc.
self._ssn = new_ssn
@<attribute-name>.setter
ssn$$
$$
$$
Ricorda: interagisci con self._ssn, non con self.ssn!
class Student:
def __init__(self, name, ssn):
self.name = name
self.ssn = ssn
...
@ssn.deleter
def ssn(self):
# Puoi fare clean up, soft delete, o sollevare un'eccezione
raise AttributeError("Can't delete SSN")
shaw = Student("Daniel Shaw", "193-80-1821")
print(shaw.ssn) # Accedi all'attributo ssn
XXX-XX-1821
shaw.ssn = "821-11-9380" # Aggiorna il numero di previdenza sociale di Shaw
print(shaw.ssn)
XXX-XX-9380
del shaw.ssn # Prova a eliminare l'attributo ssn
AttributeError: Can't delete SSN
Programmazione a oggetti intermedia in Python