17.02.2013 22:38, Steven D'Aprano wrote:
On 17/02/13 00:46, Jan Kaliszewski wrote:
16.02.2013 11:18, Antoine Pitrou wrote:
On Sat, 16 Feb 2013 15:51:28 +1100 Steven D'Aprano
wrote: from collections import namedtuple
FIELDNAMES = """...""" # Format it however you like.
class MyClassWithAnExtremelyLongName(namedtuple("Cheese", FIELDNAMES)): pass
Still not very elegant IMO
I agree. I see some nicer (IMHO) alternatives... Apart from the recipe I mentioned in the recent post (although I am *not* convinced it should be added to the stdlib) some decorator-based way may be nice, e.g.:
@namedtuple(fields='length weight is_poisonous') class Snake: def hiss(self): return 'hiss' + self.length * 's'
This implies that all namedtuples must be callable.
No, not at all. It only means that signature specification of the namedtuple factory function would need to be extended a bit (or a separate decorator, such as namedtuple.subclass, would need to be added as an attribute) to support returning a decorator instead of a ready named tuple type.
Point3D = namedtuple('Point3D', 'x y z') pt = Point3D(2, 4, 8)
I don't think it's appropriate for tuples, named or not, to be callable.
I don't understand what do you mean. It's obvious that a named tuple *type* must be callable (as any other instantiable type) and that in 99% of cases named tuple *instances* should not be... Cheers. *j