Diferencia entre atributos y propiedades en Python

Atributo de clase: los atributos de clase son únicos para cada clase. Cada instancia de la clase tendrá este atributo. 

Ejemplo:

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.

Atributo de instancia: los atributos de instancia son únicos para cada instancia (una instancia es otro nombre para un objeto). Cada objeto/instancia tiene su propio atributo y se puede cambiar sin afectar a otras instancias.

Ejemplo:

Python3

# create a class
class Employee: 
    
    # constructor
    def __init__(self): 
        
        # instance attribute
        self.name = 'Gfg'
        self.salary = 4000
    
    # define a method
    def show(self): 
        print(self.name) 
        print(self.salary) 
  
# create an object of 
# Employee class
x = Employee()
  
# method calling
x.show()

Producción:

Gfg
4000

Ahora, veamos un ejemplo de propiedades:

1) Crear propiedades de una clase usando la función property()

Sintaxis: propiedad (fget, fset, fdel, doc)

Ejemplo:

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
 

2) Crear propiedades de una clase usando el decorador @property :

Podemos aplicar la función de propiedad usando el decorador @property. Este es uno de los decoradores integrados. Un decorador es simplemente una función que toma otra función como argumento y la agrega a su comportamiento envolviéndola.

Ejemplo:

Python3

# create a class
class byDeco: 
    
   # constructor
    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 
    
    
# create an object of class
x = byDeco('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

Tabla de diferencia entre Atributo V/s Propiedad

Atributo

Propiedad

Los atributos se describen mediante variables de datos, por ejemplo, como nombre, edad, altura, etc. Las propiedades son un tipo especial de atributos.

Dos tipos de atributos:

  • Atributo de clase
  • Atributo de instancia
Tiene métodos getter, setter y delete como los métodos __get__, __set__ y __delete__.
Los atributos de clase se definen en las partes del cuerpo de la clase, normalmente en la parte superior.  Podemos definir métodos getters, setters y delete con la función property() .
Los atributos de instancia se definen en el cuerpo de la clase usando la palabra clave self , generalmente en el método __init__() . Si solo queremos la propiedad de lectura, también hay un decorador @property que puede agregar sobre su método.

Publicación traducida automáticamente

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