Decorador de propiedades Python – @property

Una función de decorador en Python se envuelve en una función, agrega varias funcionalidades al código existente y luego lo devuelve. Se sabe que los métodos y las funciones son invocables, ya que pueden ser llamados. Por lo tanto, un decorador es también un invocable que devuelve invocable. Esto también se conoce como metaprogramación ya que en tiempo de compilación una sección del programa altera otra sección del programa. Nota: Para obtener más información, consulte Decoradores en Python

Python @property decorador

El decorador @property es un decorador incorporado en Python que es útil para definir las propiedades sin esfuerzo sin llamar manualmente a la función incorporada property() . Que se utiliza para devolver los atributos de propiedad de una clase del getter, setter y deleter indicados como parámetros. Ahora, veamos algunos ejemplos para ilustrar el uso del decorador @property en Python: Ejemplo 1: 

Python

# Python program to illustrate the use of
# @property decorator
 
# Defining class
class Portal:
 
    # Defining __init__ method
    def __init__(self):
        self.__name =''
     
    # Using @property decorator
    @property
     
    # Getter method
    def name(self):
        return self.__name
     
    # Setter method
    @name.setter
    def name(self, val):
        self.__name = val
 
    # Deleter method
    @name.deleter
    def name(self):
       del self.__name
 
# Creating object
p = Portal();
 
# Setting name
p.name = 'GeeksforGeeks'
 
# Prints name
print (p.name)
 
# Deletes name
del p.name
 
# As name is deleted above this
# will throw an error
print (p.name)
Producción:

GeeksforGeeks

## An error is thrown
Traceback (most recent call last):
  File "main.py", line 42, in 
    print (p.name)
  File "main.py", line 16, in name
    return self.__name
AttributeError: 'Portal' object has no attribute '_Portal__name'

Aquí, el decorador @property se usa para definir el nombre de la propiedad en la clase Portal, que tiene tres métodos (captador, definidor y borrador) con nombres similares, es decir, nombre(), pero tienen un número diferente de parámetros. Donde, el nombre del método (self) etiquetado con @property es un método getter, name(self, val) es un método setter ya que se usa para establecer el valor del atributo __name y, por lo tanto, está etiquetado con @name.setter. Por último, el método etiquetado con @name.deleter es un método de eliminación que puede eliminar el valor asignado por el método setter. Sin embargo, se invoca a deleter con la ayuda de una palabra clave del. Ejemplo 2: 

Python

# Python program to illustrate the use of
# @property decorator
 
# Creating class
class Celsius:
     
    # Defining init method with its parameter
    def __init__(self, temp = 0):
        self._temperature = temp
 
    # @property decorator
    @property
     
    # Getter method
    def temp(self):
         
        # Prints the assigned temperature value
        print("The value of the temperature is: ")
        return self._temperature
 
    # Setter method
    @temp.setter
    def temp(self, val):
         
        # If temperature is less than -273 than a value
        # error is thrown
        if val < -273:
            raise ValueError("It is a value error.")
         
        # Prints this if the value of the temperature is set
        print("The value of the temperature is set.")
        self._temperature = val
 
 
# Creating object for the stated class
cel = Celsius();
 
# Setting the temperature value
cel.temp = -270
 
# Prints the temperature that is set
print(cel.temp)
 
# Setting the temperature value to -300
# which is not possible so, an error is
# thrown
cel.temp = -300
Producción:

The value of the tempereture is set.
The value of the temperature is:
-270

# An error is thrown
Traceback (most recent call last):
  File "main.py", line 47, in 
    cel.temp = -300
  File "main.py", line 28, in temp
    raise ValueError("It is a value error.")
ValueError: It is a value error.

Aquí, se arroja un error de valor ya que el valor de la temperatura asignada debe estar por encima de -273. Pero aquí es -300. Por lo tanto, se arroja un error de valor.

Publicación traducida automáticamente

Artículo escrito por nidhi1352singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *