Propiedades de solo lectura en Python

Requisitos previos: clases y objetos de Python

Una clase es un proyecto o prototipo definido por el usuario a partir del cual se crean objetos. Las clases proporcionan un medio para agrupar datos y funcionalidad. La creación de una nueva clase crea un nuevo tipo de objeto, lo que permite crear nuevas instancias de ese tipo. Para ponerlo en palabras simples, supongamos una clase Estudiante , un estudiante puede tener muchas propiedades como Nombre, Curso, ID del estudiante, etc. Ahora supongamos que tenemos una Estudiante llamada Anita que está cursando un MBA, Anita es un objeto de clase. Alumno.

Ejemplo:

class student:
      
    def __init__(self, name, course):
        self.name = name
        self.course = course
  
    def studentid(self):
        return "student's identification number is \
        {}{}".format(self.name, self.course)
  
student1 = student("Anita", "MBA")
print(student1.studentid())

Producción:

student's identification number is AnitaMBA

Ahora, queremos acceder a la identificación del estudiante como una propiedad y no como un método. Para esto, todo lo que se requiere es agregar el decorador @property antes del método.

Ejemplo:

class student:
      
    def __init__(self, name, course):
        self.name = name
        self.course = course
  
    @property
    def studentid(self):
        return "student's identification number is \
        {}{}".format(self.name, self.course)
  
student1 = student("Anita", "MBA")
print(student1.studentid)

Producción:

student's identification number is AnitaMBA

Una propiedad de solo lectura es un decorador de propiedades sin setter. La identificación del estudiante aquí es una propiedad de solo lectura ya que no tiene un setter. En términos generales, significa que el valor no es modificable. Para entender, tomemos un ejemplo más:

Ejemplo:

class employee:
    def __init__(self, basesalary, yearsofworking):
        self.basesalary = basesalary
        self.yearsofworking = yearsofworking
      
    @property
    def salary(self):
        self.salary = 50000
  
amit = employee(20000, 5)
amit.salary = 10000
print(amit.basesalary, amit.yearsworking, amit.salary)

Producción:

Rastreo (última llamada más reciente):
Archivo “/home/e029e0b9ccad85905e22dd5a91943897.py”, línea 14, en
amit.salary = 10000
AttributeError: no se puede establecer el atributo

Para arreglar esto, se debe agregar un setter en este código. Después de hacer esto, ya no será una propiedad de solo lectura.

Ejemplo:

class employee:
    def __init__(self, basesalary, yearsofworking):
        self.basesalary = basesalary
        self.yearsofworking = yearsofworking
        self._salary = 0
      
    @property
    def salary(self):
        return self._salary
  
    @salary.setter
    def salary(self, salary):
        self._salary = salary
  
amit = employee(20000, 5)
amit.salary = 10000
print(amit.basesalary, amit.yearsofworking, amit.salary)

Producción:

20000 5 10000

Publicación traducida automáticamente

Artículo escrito por jnikita356 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 *