# Getter function @property deffirst_name(self): return self._first_name # Repeated property code, but for a different name (bad!) @property deflast_name(self): return self._last_name
# Setter function @first_name.setter deffirst_name(self, value): ifnotisinstance(value,str): raise TypeError("Expected a string") self._first_name = value
@last_name.setter deflast_name(self, value): ifnotisinstance(value,str): raise TypeError("Expected a string") self._last_name = value
# Deleter function (optional) @first_name.deleter deffirst_name(self): raise AttributeError("Can't delete attribute")
if __name__ == '__main__': person_1 = Person("Lily") print(person_1.first_name) # Calls the getter try: person_1.last_name = 1 except Exception as error: print(error)
try: del person_1.first_name except Exception as error: print(error)