Lennart Regebro
Lennart Regebro

Reputation: 172239

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?

Upvotes: 9

Views: 3298

Answers (1)

Ignacio Vazquez-Abrams
Ignacio Vazquez-Abrams

Reputation: 798606

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.

Upvotes: 23

Related Questions