Define a parent class called FiniteSet whose __init__ takes as input a list of distinct elements and has one method, card() which returns the cardinality of the set. Define a class called FiniteMetricSpace which derives from FiniteSet and whose __init__ takes two inputs, a list of distinct elements of the underlying set and a dictionary whose keys are all the pairs of points in this set and values are the corresponding ditances. This class should have an additional method dist(x,y) which takes two points in the set and returns the distance between them. When complete your code should tally with the following session: >>> F = FiniteSet([2, 3]) >>> F.card() 2 >>> G = FiniteMetricSpace([2, 3], {(2, 3):1, (3,2):1, (2,2):0, (3,3):0}) >>> G.card() 2 >>> G.dist(2,3) 1 NOTE: I explored some more and found that the problem we were having with super() is some Python 2.7 nonsense about "old style" and "new style" classes. To announce to Python 2.7 that Point is a "new style" class we have to define it as "class Point(object):" not just "class Point:" With this change, the call to super() works as documented. See allpoint.py for an updated version of the experimental code we discussed in class with this change. (In Python 3.x this "old class" and "new class" stuff is not there, so the original code works fine.)