1. The constructor is called __init__. Every Point object has attributes called x and y. They are defined by assigning values to self.x and self.y in the constructor. To create the specified Point objects from the Shell: >>> p1 = Point(3, 4) >>> p2 = Point(-5, -12) 3. The correct call is c: >>> p1.distance_from_origin() 5.0 We can determine this by consulting the header of the method: def distance_from_origin(self): The only parameter is the special parameter self, and its value comes from the called object (p1), which we put before the dot. Doing so causes a reference to the called object to be assigned to the special parameter self, and thus the method can use self to access the internals of the called object -- including the x and y values needed to compute the distance. And because self is the only parameter, we don't need to pass in anything else, and thus we have empty parens at the end of the method call. 4. The move_down() method moves the called Point object down by the specified number of units. In other words, it subtracts the specified value from the Point object's y-coordinate. In our example, we get: >>> p1.move_down(8) >>> p1 (3, -4) move_down() doesn't need a return value because it modifies the internals of the called object, and those modifications will still be there after the method returns.