Navigation

Python

Python How to Create Property Getters and Setters

Transform your Python classes with @property decorators - add validation and computed attributes without breaking your clean API.

Table Of Contents

When Direct Attribute Access Isn't Enough

Ever had a class where you suddenly needed to validate attribute values or compute them on the fly? Traditional getter/setter methods (get_temperature(), set_temperature()) feel clunky in Python. There's a better way.

The Pythonic Approach with @property

class Temperature:
    def __init__(self, celsius=0):
        self._celsius = celsius
    
    @property
    def celsius(self):
        return self._celsius
    
    @celsius.setter
    def celsius(self, value):
        if value < -273.15:
            raise ValueError("Temperature below absolute zero is not possible")
        self._celsius = value
    
    @property
    def fahrenheit(self):
        return self._celsius * 9/5 + 32
    
    @fahrenheit.setter
    def fahrenheit(self, value):
        self._celsius = (value - 32) * 5/9

# Usage
temp = Temperature()
temp.celsius = 25
print(temp.fahrenheit)  # 77.0

temp.fahrenheit = 86
print(temp.celsius)     # 30.0

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

The Power of Properties

The @property decorator transforms methods into attribute-like access. This means you can start with simple attributes and later add validation, logging, or computation without changing how your class is used. It's the perfect example of Python's "we're all consenting adults" philosophy - providing control when needed without forcing boilerplate.

Best Practices

  • Use properties for expensive computations sparingly (consider caching)
  • Keep property methods simple and fast
  • Don't hide complex operations behind property access

Learn More

Explore Python's descriptor protocol for deeper customization. For class design patterns, see our guides on Python decorators and Python type hinting.

Share this article

Add Comment

No comments yet. Be the first to comment!

More from Python