🎯

How to Use @property in Python

PythonIntermediate

Create getters and setters with property decorator.

Code Example

Python
class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius
    
    @property
    def celsius(self):
        """Get temperature in Celsius"""
        return self._celsius
    
    @celsius.setter
    def celsius(self, value):
        """Set temperature in Celsius"""
        if value < -273.15:
            raise ValueError("Temperature below absolute zero!")
        self._celsius = value
    
    @property
    def fahrenheit(self):
        """Get temperature in Fahrenheit"""
        return self._celsius * 9/5 + 32
    
    @fahrenheit.setter
    def fahrenheit(self, value):
        """Set temperature in Fahrenheit"""
        self.celsius = (value - 32) * 5/9

# Usage
temp = Temperature(25)
print(f"Celsius: {temp.celsius}°C")
print(f"Fahrenheit: {temp.fahrenheit}°F")

# Set via property
temp.celsius = 30
print(f"\nNew Celsius: {temp.celsius}°C")
print(f"New Fahrenheit: {temp.fahrenheit}°F")

# Set via fahrenheit
temp.fahrenheit = 212
print(f"\nBoiling point: {temp.celsius}°C")

# Validation
try:
    temp.celsius = -300
except ValueError as e:
    print(f"\nError: {e}")

# Read-only property
class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        import math
        return math.pi * self._radius ** 2

circle = Circle(5)
print(f"\nCircle area: {circle.area:.2f}")

# Cannot set read-only property
try:
    circle.area = 100
except AttributeError as e:
    print(f"Cannot set: {e}")

Explanation

@property creates getter methods. Use @name.setter for setter. Enables validation and computed attributes. Access like attributes, not methods.

Related Tutorials