Crear Getter y Setter en Python

Olorunfemi Akinlua 21 junio 2023
  1. Getter y Setter en Python
  2. Use una función para crear Getter y Setter en Python
  3. Usa la función property() para crear Getter y Setter en Python
  4. Use el decorador @property para crear Getter y Setter en Python
Crear Getter y Setter en Python

La Programación Orientada a Objetos (POO), un paradigma de programación, hace que muchas cosas sean fáciles, desde la componibilidad hasta la herencia, y nos permite crear características y programar partes más rápido. Este paradigma tiene diferentes características; dos son getters y setters.

Las clases, la base de la programación orientada a objetos, a menudo tienen variables que son únicas para cada instancia, y estas variables (a menudo llamadas propiedades) se establecen u obtienen a través de métodos. Estos métodos se denominan getters y setters.

Estos comportamientos son populares en los lenguajes de programación que admiten programación orientada a objetos, y Python también lo admite. Este artículo discutirá cómo crear un getter y un setter en Python.

Getter y Setter en Python

Getters y Setters son métodos que nos ayudan a establecer variables de clase o propiedades sin acceso directo, anulando el propósito de abstracción y encapsulación. Entonces, con getters y setters, tenemos la capacidad de trabajar con propiedades de clase.

Antes de crear getters y setters, es importante saber que, a diferencia de otros lenguajes de programación, Python no tiene campos ocultos por lo que tendrá acceso a las variables dentro de una clase directamente a través de la notación de puntos.

Podemos lograr getters y setters usando funciones normales, función property() y decoradores property().

Use una función para crear Getter y Setter en Python

Las funciones de clase típicas llamadas métodos son útiles para crear captadores y establecedores, y podemos configurarlos fácilmente utilizando el concepto de auto.

El método devuelve la propiedad para el captador, y para los establecedores, el método vincula el argumento a la propiedad. Para mostrar, usaremos un Employee que tiene una propiedad de posición, el método getter llamado getPosition, y el método setter llamado setPosition.

class Employee:
    def __init__(self) -> None:
        self.position = None

    def getPosition(self):
        return self.position

    def setPosition(self, position):
        self.position = position


Jacob = Employee()
Jinku = Employee()

Jacob.setPosition("Engineer II")
Jinku.setPosition("Senior Engineer")

print(Jacob.position)
print(Jinku.getPosition())

Producción :

Engineer II
Senior Engineer

Pero esta configuración o enfoque no tiene un comportamiento especial.

Usa la función property() para crear Getter y Setter en Python

Para obtener un comportamiento especial, podemos hacer uso de la función property() que crea y devuelve un objeto de propiedad, que contiene tres métodos, getter(), setter() y delete().

Ayuda a proporcionar una interfaz para los atributos de instancia. Esta funcionalidad nos permite crear fácilmente todas las habilidades getter y setter.

Para usar la función propiedad(), necesitamos establecer cuatro valores de argumento que son funciones que hacen de propiedad(), una función de orden superior.

Los métodos getter, setter y delete son sus argumentos (que son todos opcionales) y devuelve el objeto de propiedad.

property(fget, fset, fdel, doc)

Usemos la función property() en nuestro código OOP.

class Employee:
    def __init__(self):
        self.position = None

    def getPosition(self):
        return self.position

    def setPosition(self, position):
        self.position = position

    pos = property(getPosition, setPosition)


Jacob = Employee()
Jinku = Employee()

Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"

print(Jacob.position)
print(Jinku.position)

Producción :

Engineer II
Senior Engineer

Con la introducción de la función property(), tenemos el enlace pos, que contiene el objeto de propiedad que ayuda a mantener seguro el acceso a las propiedades privadas.

Use el decorador @property para crear Getter y Setter en Python

Podemos implementar la función property() usando el decorador @property, y con esto, no hay necesidad de usar los nombres get y set dentro de nuestro método.

Con el decorador @property, podemos reutilizar el nombre de la posición que definirá las funciones getter y setter.

Con @property, creamos el getter, y con @position.setter, creamos el setter, y eso es obvio con la instrucción print agregada al código y visible en la salida.

class Employee:
    def __init__(self):
        self.position = None

    @property
    def position(self):
        print("Get Employee Position: ")
        return self._position

    @position.setter
    def position(self, value):
        print("Set Position")
        self._position = value


Jacob = Employee()
Jinku = Employee()

Jacob.position = "Engineer II"
Jinku.position = "Senior Engineer"

print(Jacob.position)
print(Jinku.position)

Producción :

Set Position
Set Position
Set Position
Set Position
Get Employee Position:
Engineer II
Get Employee Position:
Senior Engineer

Hay cuatro Establecer posición debido al método __init__, que establece la propiedad de posición inicial cuando se llama a la instancia de la clase, lo que conduce a los dos primeros. Cuando establecemos el valor a los respectivos para los próximos dos, se imprime de nuevo.

Para el captador, imprime la declaración Obtener puesto de empleado cuando obtiene el valor de la propiedad, y el captador solo se llama dos veces. Por lo tanto, las dos declaraciones.

Podemos agregar validación a nuestro código OOP cuando usamos el método setter.

class Employee:
    def __init__(self):
        self.position = None

    @property
    def position(self):
        print("Get Employee Position: ")
        return self._position

    @position.setter
    def position(self, value):
        print("Set Position")
        if value != None and len(value) <= 2:
            raise ValueError("Position name is less than two and is deemed invalid")
        self._position = value


Jacob = Employee()
Jinku = Employee()

Jacob.position = "OS"
Jinku.position = "Senior Engineer"

print(Jacob.position)
print(Jinku.position)

Producción :

Set Position
Set Position
Set Position
Traceback (most recent call last):
  File "c:\Users\akinl\Documents\Python\getterSetter.py", line 20, in <module>
    Jacob.position = "OS"
  File "c:\Users\akinl\Documents\Python\getterSetter.py", line 14, in position
    raise ValueError("Position name is less than two and is deemed invalid")
ValueError: Position name is less than two and is deemed invalid
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Python Property