> This issue bit me once too often a few months ago, and now I have a class > called > "O" from which I often subclass instead of from "object". > Its main purpose is a friendly __str__ method, though it also has a friendly > __init__. > > Code: > > class O(object): > ''' A bare object subclass to allow storing arbitrary attributes. > It also has a nicer default str() action, and an aggressive repr(). > ''' > > def __init__(self, **kw): > ''' Initialise this O. > Fill in attributes from any keyword arguments if supplied. > This call can be omitted in subclasses if desired. > ''' > for k in kw: > setattr(self, k, kw[k]) > > def __str__(self): > return ( "<%s %s>" > % ( self.__class__.__name__, > ",".join([ "%s=%s" % (attr, getattr(self, attr)) > for attr in sorted(dir(self)) if > attr[0].isalpha() > ]) > ) > )
This is a very interesting solution. I think it might be better suited (for my purpose) to __repr__ rather than __str__, mostly because I still lose control of the order the attributes appear. I really like the general idea of subclassing object though, because I often have classes with dozens of attributes and __init__ gets very messy. Chris' dynamically generated format string looks to be my best bet in the absence of a perfect solution. Cheers, Drea -- http://mail.python.org/mailman/listinfo/python-list