In [7]:
from math import pi
In [1]:
class Circle:
def __init__(self, radius=1):
self.radius = radius # Calls the radius setter method
@property
def radius(self):
print('calling radius getter')
return self._radius
@radius.setter
def radius(self, value):
print('calling radius setter')
if value < 0:
raise ValueError("Radius cannot be negative")
self._radius = value
@property
def diameter(self):
return 2 * self.radius
@diameter.setter
def diameter(self, value):
self.radius = value / 2
@property
def area(self):
return pi * self.radius ** 2
@area.setter
def area(self, value):
raise AttributeError('Area not settable')
# __str__() is not needed, if __repr__ is also having same implementation
# def __str__(self):
# return 'Circle({})'.format(self.radius)
def __repr__(self):
return 'Circle({})'.format(self.radius)
In [2]:
c = Circle(5)
In [3]:
c = Circle(-5)
In [4]:
c.radius
Out[4]:
In [5]:
c.diameter
Out[5]:
In [8]:
c.area
Out[8]:
In [9]:
c.diameter = 2
In [10]:
c.radius
Out[10]:
In [11]:
c.area
Out[11]:
In [12]:
c.radius = -1
In [13]:
c.diameter = -2
In [14]:
c.area = 100
In [ ]: