Speaking of sharing Python with math teachers, not just
librarians (the bravest I sometimes thing), I included this
Circle in the session last night (adults learning, andragogy
at work):
class Circle:
"""setting either the radius or area attribute sets the other
as a dependent value. Initialized with radius only, unit
circle by default. """
def __init__(self, radius = 1):
self.radius = radius
@property
def area(self):
return self._area
@property
def radius(self):
return self._radius
@area.setter
def area(self, value):
self._area = value
self._radius = self.area / (2 * math.pi)
@radius.setter
def radius(self, value):
self._radius = value
self._area = math.pi * (self.radius ** 2)
def __repr__(self):
return "Circle(radius = {})".format(self.radius)
the_circle = Circle(5)print("the_circle:", the_circle)print("Area:
", the_circle.area)the_circle.area = 50print("Radius when Area=50:",
the_circle.radius)
That's right, the area changes if you set the radius
attribute and the other way around. I'm not claiming
to be the first to think of doing this.
We're free to program a lot of geometric types like
that, that keep track of their own area and volume (a
theme at thekirbster.pythonanywhere.com as well,
the tiny Flask application I use as a classroom demo).
Here's the Jupyter Notebook I put together before
class, where the above Circle type appears:
https://github.com/4dsolutions/Python5/blob/master/Descriptors%20and%20Properties.ipynb
(also viewable in nbviewer.jupyter.org, just paste
in the URL).
Kirby
_______________________________________________
Edu-sig mailing list
[email protected]
https://mail.python.org/mailman/listinfo/edu-sig