Andrew MacKeith a écrit :
I create a class like this in Python-2.6
>>> class Y(str):
... def __init__(self, s):
... pass
...
>>> y = Y('giraffe')
>>> y
'giraffe'
>>>
How does the base class (str) get initialized with the value passed to
Y.__init__() ?
It happens in the __new__ method (which is the proper "constructor")
class Y(str):
def __new__(cls, value, foo="foo"):
instance = str.__new__(cls, value)
instance.foo = foo
return instance
def __repr__(self):
return "<%s(%s, %s)>" % (type(self).__name__, self, self.foo)
Is this behavior specific to the str type, or do base classes not need
to be explicitly initialized?
When you override a method in a derived class, it's your responsability
to call on the parent(s) class(es) implementation. __init__ is not an
exception to that rule. The point is that since __init__ works by
mutating the newly created instance, it makes no sense to have a
distinct __init__ for immutable types - which have their "value" set
once for all at creation time.
--
http://mail.python.org/mailman/listinfo/python-list