La función de propiedad de Python() devuelve la propiedad y se usa para crear la propiedad de una clase.
Sintaxis: propiedad (fget, fset, fdel, doc)
Parámetros:
- fget() – utilizado para obtener el valor del atributo
- fset() : se usa para establecer el valor del atributo
- fdel() : se usa para eliminar el valor del atributo
- doc() – string que contiene la documentación (docstring) para el atributo
Retorno: Devuelve un atributo de propiedad del getter, setter y deleter dado.
Nota:
- Si no se proporcionan argumentos, el método property() devuelve un atributo de propiedad base que no contiene ningún getter, setter o deleter.
- Si no se proporciona doc, el método property() toma la string de documentación de la función getter.
Ejemplo #1: Usando el método property()
Python3
# Python program to explain property() function # Alphabet class class Alphabet: def __init__(self, value): self._value = value # getting the values def getValue(self): print('Getting value') return self._value # setting the values def setValue(self, value): print('Setting value to ' + value) self._value = value # deleting the values def delValue(self): print('Deleting value') del self._value value = property(getValue, setValue, delValue, ) # passing the value x = Alphabet('GeeksforGeeks') print(x.value) x.value = 'GfG' del x.value
Producción:
Getting value GeeksforGeeks Setting value to GfG Deleting value
Propiedad de Python usando Decorator
El trabajo principal de los decoradores es que se utilizan para agregar funcionalidad al código existente. También llamada metaprogramación, ya que una parte del programa intenta modificar otra parte del programa en tiempo de compilación.
Ejemplo #2: Uso del decorador @property
Python3
# Python program to explain property() # function using decorator class Alphabet: def __init__(self, value): self._value = value # getting the values @property def value(self): print('Getting value') return self._value # setting the values @value.setter def value(self, value): print('Setting value to ' + value) self._value = value # deleting the values @value.deleter def value(self): print('Deleting value') del self._value # passing the value x = Alphabet('Peter') print(x.value) x.value = 'Diesel' del x.value
Producción:
Getting value Peter Setting value to Diesel Deleting value
Usar el decorador @property funciona igual que el método property().
Primero, especifique que el método value() también es un atributo de Alphabet, luego, usamos el valor del atributo para especificar el establecedor de propiedades de Python y el eliminador. Tenga en cuenta que el mismo método value() se usa con diferentes definiciones para definir getter, setter y deleter. Cada vez que usamos x.value, internamente llama al getter, setter y deleter apropiado.
Propiedad de Python vs atributo
Atributo de clase: los atributos de clase son únicos para cada clase. Cada instancia de la clase tendrá este atributo.
Python3
# declare a class class Employee: # class attribute count = 0 # define a method def increase(self): Employee.count += 1 # create an Employee # class object a1 = Employee() # calling object's method a1.increase() # print value of class attribute print(a1.count) a2 = Employee() a2.increase() print(a2.count) print(Employee.count)
Producción:
1 2 2
En el ejemplo anterior, la variable de conteo es un atributo de clase.
Propiedad de Python(): Devuelve la propiedad
Python3
# create a class class gfg: # constructor def __init__(self, value): self._value = value # getting the values def getter(self): print('Getting value') return self._value # setting the values def setter(self, value): print('Setting value to ' + value) self._value = value # deleting the values def deleter(self): print('Deleting value') del self._value # create a properties value = property(getter, setter, deleter, ) # create a gfg class object x = gfg('Happy Coding!') print(x.value) x.value = 'Hey Coder!' # deleting the value del x.value
Producción:
Getting value Happy Coding! Setting value to Hey Coder! Deleting value
Aplicaciones
Al usar el método property(), podemos modificar nuestra clase e implementar la restricción de valor sin que se requiera ningún cambio en el código del cliente. Para que la implementación sea compatible con versiones anteriores.
Publicación traducida automáticamente
Artículo escrito por shubham tyagi 4 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA