Free Online Code Editor
Create getters and setters with property decorator.
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}")@property creates getter methods. Use @name.setter for setter. Enables validation and computed attributes. Access like attributes, not methods.