2010-02-06 6 views
7

Prendete questo codice:Qual è un'alternativa più gradevole a un _tuogo di namedtuples?

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

parts._replace works ma in quanto è un metodo sottolineato, si suppone di essere interno, e non utilizzati. C'è un'alternativa? Io non voglio fare:

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

causa che lo rende una tupla ordinaria, e non un namedtuple, e facendo:

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

è un pò stupido. :)

Idee?

risposta

19

La ragione per cui i metodi di namedtuple iniziano con un carattere di sottolineatura iniziale è solo per evitare conflitti di nomi. Sono should not be considered to be for internal use only:

Per evitare conflitti con i nomi dei campi, i nomi di metodo e attributo iniziano con un trattino di sottolineatura.

+0

Ahaaaa ......... –

+0

per quanto ne so non c'è mai stato un PEP per 'namedtuple', dove si potrebbe sostenere che * * suffisso una sottolineatura sarebbe più appropriato (à la' class_') solo per evitare tali equivoci. – tzot

+1

La suffffazione potrebbe essere stata una scelta migliore anche se non avrebbe funzionato bene con l'opzione rename = True. FWIW, il codice namedtuple è stato ampiamente rivisto e discusso prima del rilascio. Costruire la ricetta è stato uno sforzo della comunità (si veda http://code.activestate.com/recipes/500261-named-tuples/) e ha subito ulteriori revisioni e revisioni su python-dev. –

Problemi correlati