Property Decorators

Fist thing, What is Decorators? In Python, a decorators is a special type of function that modifies or enhances the behaviour of another function or method without changing its actual code. Here is an analogy:- Imagine you have a gift, let say a book. To make it special you wrap up with gift paper. Just like decorators. Here is the problem when I change the model name of our car attribute it get change but it shouldn't be happened:- class Car: total_car=0 def __init__(self,brand,model): self.brand=brand self.model=model Car.total_car+=1 def full_function(self): return f"{self.brand} {self.model}" def fuel_type(self): return "Petrol or Desiel" @staticmethod def general_description(): return "Cars mean of transportation" class ElectricCar(Car): def __init__(self,brand,model,battery_size): super().__init__(brand,model) self.battery_size=battery_size def fuel_type(self): return "Electric Charge" Tata=Car("TATA","Sedan") Mahindera=Car("Mahindera","Geep") Tata.model="city" print(Tata.model) Output: city As you can see I can change model name how avoid this situation and make model read-only. We are going to use property method. What property method going to do is that having control over attribute so nobody can have access of it. class Car: total_car=0 def __init__(self,brand,model): self.brand=brand self.__model=model Car.total_car+=1 def full_function(self): return f"{self.brand} {self.__model}" def fuel_type(self): return "Petrol or Desiel" @staticmethod def general_description(): return "Cars mean of transportation" @property def model(self): return self.__model class ElectricCar(Car): def __init__(self,brand,model,battery_size): super().__init__(brand,model) self.battery_size=battery_size def fuel_type(self): return "Electric Charge" Tata=Car("TATA","Sedan") Mahindera=Car("Mahindera","Geep") Tata.model="city" print(Tata.model) Output: ERROR! Traceback (most recent call last): File "", line 26, in File "", line 5, in __init__ AttributeError: property 'model' of 'Car' object has no setter You need private the model attribute. Use property method to have access of an attribute so nobody can modify it. It also says you cannot even modify with function (model()). After erasing Tata.model="city" then only you can have access to it.

May 10, 2025 - 01:05
 0
Property Decorators

Fist thing,
What is Decorators?
In Python, a decorators is a special type of function that modifies or enhances the behaviour of another function or method without changing its actual code.

Here is an analogy:-
Imagine you have a gift, let say a book. To make it special you wrap up with gift paper. Just like decorators.

Here is the problem when I change the model name of our car attribute it get change but it shouldn't be happened:-

class Car:
    total_car=0
    def __init__(self,brand,model):
        self.brand=brand
        self.model=model
        Car.total_car+=1
    def full_function(self):
        return f"{self.brand} {self.model}"
    def fuel_type(self):
        return "Petrol or Desiel"
        
    @staticmethod
    def general_description():
        return "Cars mean of transportation"
    
class ElectricCar(Car):
    def __init__(self,brand,model,battery_size):
        super().__init__(brand,model)
        self.battery_size=battery_size
    def fuel_type(self):
        return "Electric Charge"
        
Tata=Car("TATA","Sedan")
Mahindera=Car("Mahindera","Geep")

Tata.model="city"
print(Tata.model)
Output:
city

As you can see I can change model name how avoid this situation and make model read-only.

We are going to use property method. What property method going to do is that having control over attribute so nobody can have access of it.

class Car:
    total_car=0
    def __init__(self,brand,model):
        self.brand=brand
        self.__model=model
        Car.total_car+=1
    def full_function(self):
        return f"{self.brand} {self.__model}"
    def fuel_type(self):
        return "Petrol or Desiel"
        
    @staticmethod
    def general_description():
        return "Cars mean of transportation"
    @property
    def model(self):
        return self.__model
    
class ElectricCar(Car):
    def __init__(self,brand,model,battery_size):
        super().__init__(brand,model)
        self.battery_size=battery_size
    def fuel_type(self):
        return "Electric Charge"
        
Tata=Car("TATA","Sedan")
Mahindera=Car("Mahindera","Geep")

Tata.model="city"
print(Tata.model)
Output:
ERROR!
Traceback (most recent call last):
  File "", line 26, in 
  File "", line 5, in __init__
AttributeError: property 'model' of 'Car' object has no setter
  1. You need private the model attribute.
  2. Use property method to have access of an attribute so nobody can modify it.
  3. It also says you cannot even modify with function (model()).
  4. After erasing Tata.model="city" then only you can have access to it.