shape point( repr(pq eval( __module__ repr( )repr(qimport returns'point( )returns'point( )we must give the module name when eval()-ing if we used import shape (this would not be necessary if we had done the import differentlyfor examplefrom shape import point python provides every object with few private attributesone of which is __module__a string that holds the object' module namewhich in this example is "shapeat the end of this snippet we have two point objectsp and qboth with the same attribute valuesso they compare as equal the eval(function returns the result of executing the string it is given--which must contain valid python statement def __str__(self)return "({ ! }{ ! })format(selfthe built-in str(function works like the repr(functionexcept that it calls the object' __str__(special method the result is intended to be understandable to human readers and is not expected to be suitable for passing to the eval(function continuing the previous examplestr( (or str( )would return the string '( )we have now covered the simple point class--and also covered lot of behindthe-scenes details that are important to know but which can mostly be left in the background the point class holds an (xycoordinate-- fundamental part of what we need to represent circleas we discussed at the beginning of the in the next subsection we will see how to create custom circle classinheriting from point so that we don' have to duplicate the code for the and attributes or for the distance_from_origin(method inheritance and polymorphism |the circle class builds on the point class using inheritance the circle class adds one additional data attribute (radius)and three new methods it also reimplements few of point' methods here is the complete class definitionclass circle(point)def __init__(selfradiusx= = )super(__init__(xyself radius radius def edge_distance_from_origin(self)return abs(self distance_from_origin(self radiusdynamic code execution