La construcción property () devuelve el atributo de propiedad.
La sintaxis de property()
es:
propiedad (fget = None, fset = None, fdel = None, doc = None)
Lectura recomendada: Python @property: ¿Cómo usarlo y por qué?
propiedad () Parámetros
La property()
toma cuatro parámetros opcionales:
- fget (opcional) : función para obtener el valor del atributo. Por defecto es
None
. - fset (opcional) : función para establecer el valor del atributo. Por defecto es
None
. - fdel (opcional) : función para eliminar el valor del atributo. Por defecto es
None
. - doc (opcional) : una cadena que contiene la documentación (docstring) para el atributo. Por defecto es
None
.
Valor de retorno de la propiedad ()
property()
devuelve el atributo de propiedad del captador, definidor y eliminador dado.
- Si no se proporcionan argumentos,
property()
devuelve un atributo de propiedad base que no contiene ningún captador, definidor o eliminador. - Si no se proporciona doc ,
property()
toma la cadena de documentos de la función getter.
Ejemplo 1: crear un atributo con getter, setter y deleter
class Person: def __init__(self, name): self._name = name def get_name(self): print('Getting name') return self._name def set_name(self, value): print('Setting name to ' + value) self._name = value def del_name(self): print('Deleting name') del self._name # Set property to use get_name, set_name # and del_name methods name = property(get_name, set_name, del_name, 'Name property') p = Person('Adam') print(p.name) p.name = 'John' del p.name
Salida
Obteniendo nombre El nombre es: Adam Configurando el nombre a John Eliminando nombre
Aquí, _name se utiliza como variable privada para almacenar el nombre de Person.
También establecemos:
- un método getter
get_name()
para obtener el nombre de la persona, - un método
set_name()
de establecimiento para establecer el nombre de la persona, - un método
del_name()
de eliminación para eliminar el nombre de la persona.
Ahora, establecemos un nuevo nombre de atributo de propiedad llamando al property()
método.
Como se muestra en el programa, la referencia p.name
interna a las llamadas get_name()
como getter, set_name()
setter y del_name()
como deleter a través de la salida impresa presente dentro de los métodos.
Ejemplo 2: uso del decorador @property
En lugar de usar property()
, puede usar el decorador de Python @property
para asignar el captador, definidor y eliminador.
class Person: def __init__(self, name): self._name = name @property def name(self): print('Getting name') return self._name @name.setter def name(self, value): print('Setting name to ' + value) self._name = value @name.deleter def name(self): print('Deleting name') del self._name p = Person('Adam') print('The name is:', p.name) p.name = 'John' del p.name
Salida
Obteniendo nombre El nombre es: Adam Configurando el nombre a John Eliminando nombre
Aquí, en lugar de usar property()
, usamos el @property
decorador.
Primero, especificamos que el name()
método también es un atributo de Person. Esto se hace usando @property
antes el método getter como se muestra en el programa.
A continuación, usamos el nombre del atributo para especificar el definidor y el eliminador.
Esto se hace utilizando @name.setter
para el método de establecimiento y @name.deleter
para el método de eliminación.
Observe que hemos utilizado el mismo método name()
con diferentes definiciones para definir el captador, el definidor y el eliminador.
Ahora, cada vez que lo usamos p.name
, llama internamente al getter, setter y eliminador apropiados como se muestra en la salida impresa presente dentro del método.