Problem in a str subclass

Michael Hudson mwh at python.net
Tue Nov 27 12:25:42 CET 2001


Manus Hand <manus at bullfrog-tech.com> writes:

> Can anyone explain why I get the following result?
> 
> Python 2.2b2 (#1, Nov 26 2001, 20:03:34)
> [GCC egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)] on linux2
> Type "help", "copyright", "credits" or "license" for more information.
> >>> class X(str):
> ...     def __init__(self, xx = None):
> ...             if not xx: xx = 'ye olde default value'
> ...             str.__init__(self, xx)
> ...
> >>> x = X('yo yo yo')
> >>> x
> 'yo yo yo'
> >>> x = X()
> >>> x
> ''
> >>>
> 
> I can't see why X() is not set to 'ye olde default value'

You need to do your initialisation inside the *class method* __new__;
by the time __init__ is called, the string has been constructed, and
as it's immutable...

You want to do this instead:

>>> class X(str):
...  def __new__(cls, xx="default"):
...   return str.__new__(cls, xx)
...
>>> X()
'default'


This is getting to be a FAQ, and it's a confusing point...

Cheers,
M.

-- 
7. It is easier to write an incorrect program than understand a
   correct one.
  -- Alan Perlis, http://www.cs.yale.edu/homes/perlis-alan/quotes.html



More information about the Python-list mailing list