In Python property
decorator is a built-in function that allows you to define methods that are accessed like attributes. It is used to create “getter,” “setter,” and “deleter” methods for managing attribute access and modification in a controlled manner. The property
decorator helps in implementing the concept of encapsulation by providing a way to define computed or validated attributes.
The property
decorator is typically used in conjunction with three methods:
- Getter method: This method retrieves the value of a property.
- Setter method: This method sets the value of a property.
- Deleter method: This method deletes a property.
Here’s an example that demonstrates the usage of the property
decorator:
class Circle: def __init__(self, radius): self.radius = radius @property def diameter(self): return 2 * self.radius @diameter.setter def diameter(self, value): self.radius = value / 2 @diameter.deleter def diameter(self): del self.radius # Creating a Circle object c = Circle(5) # Accessing the diameter property print(c.diameter) # Output: 10 # Modifying the diameter property c.diameter = 14 print(c.radius) # Output: 7 # Deleting the diameter property del c.diameter print(c.radius) # Raises an AttributeError: 'Circle' object has no attribute 'radius'
In the example above, the Circle
class defines a radius
attribute. The diameter
property is defined using the @property
decorator, which transforms the diameter()
method into a read-only property. It allows accessing the diameter as an attribute without calling it as a method.
The @diameter.setter
decorator is used to define the setter method for the diameter
property. It is called when the property is assigned a new value. In this case, it updates the radius
attribute based on the provided diameter value.
The @diameter.deleter
decorator defines the deleter method for the diameter
property. It is called when the property is deleted. In this example, it deletes the radius
attribute.
By using the property
decorator with its associated getter, setter, and deleter methods, you can control attribute access and modify the behavior of accessing or modifying properties in Python classes.