views:

70

answers:

1

Take this code:

>>> import urlparse
>>> parts = urlparse.urlparse('http://docs.python.org/library/')
>>> parts = parts._replace(path='/3.0'+parts.path)

parts._replace works but as it is an underscored method, it's supposed to be internal, and not used. Is there an alternative? I don't want to do:

>>> parts = parts[:2] + ('/3.0'+parts.path,) + parts[3:]

Because that makes it an ordinary tuple, and not a namedtuple, and doing:

>>> parts = namedtuple(scheme=parts.scheme, netloc=parts.netloc, etc etc)

is kinda stupid. :)

Ideas?

+6  A: 

The reason methods of namedtuple start with an initial underscore is only to prevent name collisions. They should not be considered to be for internal use only:

To prevent conflicts with field names, the method and attribute names start with an underscore.

Ignacio Vazquez-Abrams
Ahaaaa.........
Lennart Regebro
AFAIK there never was a PEP for `namedtuple`, where one could argue that *suffixing* an underscore would be more appropriate (à la `class_`) just to avoid such misunderstandings.
ΤΖΩΤΖΙΟΥ