@property
¶*En este ejemplo, la clase Persona tiene un atributo llamado _nombre
. El decorador @property
se utiliza para definir el método nombre como una propiedad. El método getter
devuelve el valor del atributo _nombre
y el método setter
establece el valor del atributo _nombre
.
class Persona:
def __init__(self, nombre):
self._nombre = nombre
@property
def nombre(self):
return self._nombre
@nombre.setter
def nombre(self, valor):
self._nombre = valor
persona = Persona("Juan")
print(persona.nombre) # Juan
persona.nombre = "Pedro"
print(persona.nombre) # Pedro
Juan Pedro
setter
y un getter
.Tarjeta_de_credito
tiene dos atributos: _numero
y _vencimiento
.@property
se utiliza para definir los métodos numero y vencimiento como propiedades.getter
devuelven los valores de los atributos correspondientes y los métodos setter
establecen los valores de los atributos correspondientes.setter
del atributo numero comprueba si el valor es un número enterosetter
del atributo vencimiento comprueba si el valor es una cadena.class Tarjeta_de_credito:
def __init__(self, numero, vencimiento):
self._numero = numero
self._vencimiento = vencimiento
@property
def numero(self):
return self._numero
@numero.setter
def numero(self, valor):
if not isinstance(valor, int):
raise TypeError("El número de la tarjeta debe ser un número entero.")
self._numero = valor
@property
def vencimiento(self):
return self._vencimiento
@vencimiento.setter
def vencimiento(self, valor):
if not isinstance(valor, str):
raise TypeError("La fecha de vencimiento debe ser una cadena.")
self._vencimiento = valor
tarjeta = Tarjeta_de_credito(1234567890123456, "12/23")
print(tarjeta.numero) # 1234567890123456
tarjeta.numero = 1234567890123457
print(tarjeta.numero) # 1234567890123457
tarjeta.numero = "1234567890123458" # TypeError: El número de la tarjeta debe ser un número entero.
tarjeta.vencimiento = "12/24"
print(tarjeta.vencimiento) # 12/24
tarjeta.vencimiento = 1224 # TypeError: La fecha de vencimiento debe ser una cadena.
En el siguiente ejemplo, se han añadido bloques try-except para manejar las excepciones que se producen cuando se intenta establecer el valor del atributo _numero con una cadena y cuando se intenta establecer el valor del atributo _vencimiento con un número entero.
class Tarjeta_de_credito:
def __init__(self, numero, vencimiento):
self._numero = numero
self._vencimiento = vencimiento
@property
def numero(self):
return self._numero
@numero.setter
def numero(self, valor):
if not isinstance(valor, int):
raise TypeError("El número de la tarjeta debe ser un número entero.")
self._numero = valor
@property
def vencimiento(self):
return self._vencimiento
@vencimiento.setter
def vencimiento(self, valor):
if not isinstance(valor, str):
raise TypeError("La fecha de vencimiento debe ser una cadena.")
self._vencimiento = valor
tarjeta = Tarjeta_de_credito(1234567890123456, "12/23")
print(tarjeta.numero) # 1234567890123456
tarjeta.numero = 1234567890123457
print(tarjeta.numero) # 1234567890123457
try:
tarjeta.numero = "1234567890123458"
except TypeError as e:
print(e) # El número de la tarjeta debe ser un número entero.
tarjeta.vencimiento = "12/24"
print(tarjeta.vencimiento) # 12/24
try:
tarjeta.vencimiento = 1224
except TypeError as e:
print(e) # La fecha de vencimiento debe ser una cadena.
1234567890123456 1234567890123457 El número de la tarjeta debe ser un número entero. 12/24 La fecha de vencimiento debe ser una cadena.