Hello everyone. I'm trying to understand how to use the two methods. I know that __new__ is used to create an object, while __init__ to initialize. But I'm not sure what happens when I create an object.
I found the following code in the book (Python 3 Object Oriented Programming by Dusty Phillips) import weakref class CarModel: _models = weakref.WeakValueDictionary() def __new__(cls, model_name, *args, **kwargs): model = cls._models.get(model_name) if not model: model = super().__new__(cls) cls._models[model_name] = model return model def __init__(self, model_name, air = False, tilt = False, cruise_control = False, power_locks = False, alloy_wheels = False, usb_charger = False): if not hasattr(self, "initted"): self.model_name = model_name self.air = air self.tilt = tilt self.cruise_control = cruise_control self.power_locks = power_locks self.alloy_wheels = alloy_wheels self.usb_charger = usb_charger self.intted = True dx = CarModel("Fit DX") lx = CarModel("Fit LX", air = True, tilt = True, cruise_control = True, power_locks = True, alloy_wheels = True, usb_charger = True) I assume when I call CarModel(<parameters>) __new__is being called first and then __init__ after it. 1) Does it mean that __new__ and __init__ must have the same parameters? In this particular case __new__ and __init__ both have model_name and if I understand correctly when __new__ is called the rest of the parameters (air, tilt, cruise_control, etc) are absorbed by the *args argument. Please correct me if I am wrong. 2) What happens if I don't use the same parameters, say in the case of __init__ I will remove model_name, will I still be able to call dx = CarModel("Fix DX") I realize questions might seem a bit strange or simplistic but I just want to make sure I have a correct understanding of things. Any help is appreciated.
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor