2010-02-06 3 views
7

Nehmen Sie diesen Code:Was ist eine schöne Alternative zu einem namedtuples _replace?

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

parts._replace works aber da es eine unterstrichene Methode ist, es soll intern sein, und nicht verwendet. Gibt es eine Alternative? Ich will nicht zu tun:

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

Da, dass es einen gewöhnlichen Tupel macht, und kein namedtuple und tut:

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

ist ein bisschen dumm. :)

Ideen?

Antwort

19

Der Grund Methoden namedtuple Start mit einem Unterstrich am Anfang sind nur Namenskollisionen zu verhindern. Sie should not be considered to be for internal use only:

Um Konflikte mit Feldnamen zu vermeiden, beginnen die Methoden- und Attributnamen mit einem Unterstrich.

+0

Ahaaaa ......... –

+0

AFAIK es gab nie eine PEP für 'namedtuple', wo man könnte argumentieren, dass * suffixing * ein Unterstrich wäre angemessener (à la' class_') nur zu vermeide solche Missverständnisse. – tzot

+1

suffixing kann auch eine bessere Wahl gewesen wäre es nicht gut mit dem Umbenennungs = True Option funktionieren würde. FWIW, der Named-Code wurde vor der Veröffentlichung ausführlich besprochen und diskutiert. Der Aufbau der Rezeptur wurde ein Gemeinschaftsbemühung (siehe http://code.activestate.com/recipes/500261-named-tuples/) und unterzog weitere Überarbeitung und Überprüfung über python-dev. –

Verwandte Themen