On Tue, 07 Nov 2006 05:26:07 -0800, kelin,[EMAIL PROTECTED] wrote: > Hi, > > Today I read the following sentences, but I can not understand what > does the __init__ method of a class do?
Play around with this class and see if it helps: class MagicStr(str): """Subclass of str with leading and trailing asterisks.""" def __new__(cls, value=''): print "Calling subclass constructor __new__ ..." # Construct a MagicStr object. obj = super(MagicStr, cls).__new__(cls, '***' + value + '***') print " - inspecting constructor argument:" print " value, id, type:", value, id(value), type(value) print " - inspecting constructor result:" print " value, id, type:", obj, id(obj), type(obj) # Create the instance, and call its __init__ method. return obj def __init__(self, value): print "Calling subclass __init__ ..." print " - inspecting __init__ argument:" print " value, id, type:", value, id(value), type(value) print "Done." Notice that when __new__ is called, the instance doesn't exist yet, only the class, so the first argument for __new__ is the class, not the instance. > __init__ is called immediately after an instance of the class is > created. It would be tempting but incorrect to call this the > constructor of the class. It's tempting, because it looks like a > constructor (by convention, __init__ is the first method defined for > the class), acts like one (it's the first piece of code executed in a > newly created instance of the class), That's not quite true. For new-style classes __new__ is called before __init__, as you can see from the MagicStr class above. > and even sounds like one ("init" > certainly suggests a constructor-ish nature). Incorrect, because the > object has already been constructed by the time __init__ is called, and > you already have a valid reference to the new instance of the class. > But __init__ is the closest thing you're going to get to a constructor > in Python, and it fills much the same role. This is true for old-style classes. > It says the __init__ is called immediately after an instance of the > class is created. What dose "immediately" mean? Once the __new__ method creates the instance and returns, before anything else happens, the instance's __init__ method is called. -- Steven. -- http://mail.python.org/mailman/listinfo/python-list