Open In App

Difference between attributes and properties in Python

Class Attribute: Class Attributes are unique to each class. Each instance of the class will have this attribute. 

Example:




# 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)

Output:

1
2
2

In the above example, count variable is a class attribute.

Instance Attribute: Instance Attributes are unique to each instance, (an instance is another name for an object). Every object/instance has its own attribute and can be changed without affecting other instances.

Example:




# 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()

Output:

Gfg
4000

Now, Let’s see an example on properties:

1) Create Properties of a class using property() function: 

Syntax: property(fget, fset, fdel, doc)

Example:




# 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

Output:

Getting value
Happy Coding!
Setting value to Hey Coder!
Deleting value
 

2) Create Properties of a class Using @property decorator:

We can apply the property function by using @property decorator. This is one of the built-in decorators. A decorator is simply a function that takes another function as an argument and adding to its behavior by wrapping it.

Example:




# 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

Output:

Getting value
happy Coding
Setting value to Hey Coder!
Deleting value

Table of difference between Attribute V/s Property

Attribute

Property

Attributes are described by data variables for example like name, age, height etc. Properties are special kind of attributes.

Two types of attributes:

  • Class attribute
  • Instance attribute
It has getter, setter and delete methods like __get__, __set__ and __delete__ methods.
Class attributes are defined in the class body parts usually at the top.  We can define getters, setters, and delete methods with the property() function.
Instance attribute are defined in the class body using self keyword usually it the __init__() method. If we just want to the read property, there is also a @property decorator which you can add above your method.

Article Tags :