Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is a nicer alternative to a namedtuples _replace?

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?

like image 660
Lennart Regebro Avatar asked Feb 06 '10 12:02

Lennart Regebro


1 Answers

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.

like image 131
Ignacio Vazquez-Abrams Avatar answered Nov 15 '22 21:11

Ignacio Vazquez-Abrams