You cannot use the same implementation as the result object os.stat () and others. However, Python 2.6 has a new factory function that creates a similar data type called tuple. A named tuple is a tuple whose slots can also be addressed by name. A named tuple should not require more memory according to the documentation than a regular tuple, since they do not have a dictionary for each instance. Functional signature factory:
collections.namedtuple(typename, field_names[, verbose])
The first argument indicates the name of the new type, the second argument is a string (space or comma) containing the field names, and finally, if verbose is true, the factory function also prints the generated class.
Example
Suppose you have a tuple containing a username and password. To gain access to the username, you will get the item in position zero and access to the password in position 1:
credential = ('joeuser', 'secret123') print 'Username:', credential[0] print 'Password:', credential[1]
There is nothing wrong with this code, but the tuple is not self-documenting. You should find and read the documentation about placing fields in a tuple. It is here that the named motorcade can come to the rescue. We can recode the previous example as follows:
import collections
If you are interested in what the code looks like for the newly created Credential type, you can add verbose = True to the list of arguments when creating the type, in this particular case we get the following output:
import collections Credential = collections.namedtuple('Credential', 'username, password', verbose=True) class Credential(tuple): 'Credential(username, password)' __slots__ = () _fields = ('username', 'password') def __new__(_cls, username, password): return _tuple.__new__(_cls, (username, password)) @classmethod def _make(cls, iterable, new=tuple.__new__, len=len): 'Make a new Credential object from a sequence or iterable' result = new(cls, iterable) if len(result) != 2: raise TypeError('Expected 2 arguments, got %d' % len(result)) return result def __repr__(self): return 'Credential(username=%r, password=%r)' % self def _asdict(t): 'Return a new dict which maps field names to their values' return {'username': t[0], 'password': t[1]} def _replace(_self, **kwds): 'Return a new Credential object replacing specified fields with new values' result = _self._make(map(kwds.pop, ('username', 'password'), _self)) if kwds: raise ValueError('Got unexpected field names: %r' % kwds.keys()) return result def __getnewargs__(self): return tuple(self) username = _property(_itemgetter(0)) password = _property(_itemgetter(1))
A named tuple not only provides access to fields by name, but also contains helper functions, such as the _make () function, which helps you create a Credential instance from a sequence or iteration. For example:
cred_tuple = ('joeuser', 'secret123') credential = Credential._make(cred_tuple)
The python library documentation for namedtuple contains more information and code examples, so I suggest you take a look.