2010-02-06 3 views
7

Возьмите этот код:Что лучше альтернативы namedtuples _replace?

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

parts._replace works но это подчеркнутый метод, он должен быть внутренним, а не используется. Есть ли альтернатива? Я не хочу делать:

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

Потому что делает его обычный кортеж, а не namedtuple и делает:

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

является своего рода глупо. :)

Идеи?

ответ

19

Методы причины namedtuple начинаются с начального подчеркивания только для предотвращения столкновений имен. Они should not be considered to be for internal use only:

Чтобы предотвратить конфликты с именами полей, имена методов и атрибутов начинаются с символа подчеркивания.

+0

Ahaaaa ......... –

+0

AFAIK там никогда не был PEP для 'namedtuple', где можно было бы утверждать, что * суффиксация * подчеркивание будет более подходящим (меню' class_') просто избегайте таких недоразумений. – tzot

+1

Суффикс, возможно, был лучшим выбором, хотя он не будет работать с вариантом rename = True. FWIW, код namedtuple был тщательно рассмотрен и обсужден до выпуска. Построение рецепта - это усилия сообщества (см. Http://code.activestate.com/recipes/500261-named-tuples/), и он подвергся дальнейшему пересмотру и обзору на python-dev. –

Смежные вопросы