we can catch and recover from this errorbut in this caseit feels like we should have specified some sort of default value perhaps every new object should be reset(by defaultor maybe it would be nice if we could force the user to tell us what those positions should be when they create the object most object-oriented programming languages have the concept of constructora special method that creates and initializes the object when it is created python is little differentit has constructor and an initializer the constructor function is rarely used unless you're doing something exotic sowe'll start our discussion with the initialization method the python initialization method is the same as any other methodexcept it has special name__init__ the leading and trailing double underscores mean this is special method that the python interpreter will treat as special case never name function of your own with leading and trailing double underscores it may mean nothing to pythonbut there' always the possibility that the designers of python will add function that has special purpose with that name in the futureand when they doyour code will break let' start with an initialization function on our point class that requires the user to supply and coordinates when the point object is instantiatedclass pointdef __init__(selfxy)self move(xydef move(selfxy)self self def reset(self)self move( constructing point point point( print(point xpoint ynowour point can never go without coordinateif we try to construct point without including the proper initialization parametersit will fail with not enough arguments error similar to the one we received earlier when we forgot the self argument