Propiedad de Python ()

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.nameinterna 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 @propertypara 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 @propertydecorador.

Primero, especificamos que el name()método también es un atributo de Person. Esto se hace usando @propertyantes 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.setterpara el método de establecimiento y @name.deleterpara 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.

Articulos interesantes...