On 08/09/11 11:55, egbert wrote: > My classes correspond to sql tables. > In these classes I want to have several class variables > that refer to data that are common to all instances. > > The assignment statements for the class variables are the same > in all classes, except that of these instructions needs the name > of the class itself. That name is used to read a file with meta-data. > > So what I have now is something like this (simplified): > > class TableOne(object): > m = Metadata('TableOne') > m.do_something() > def __init__(self): > etc > > class TableTwo(object): > m = Metadata('TableTwo') > m.do_something() > def __init__(self): > etc > > I have tried: > - to eliminate the class name argument, but in this phase of the > object creation __class__ and __name__ are not available > - to move the two statements to a superclass, but the class variables > come in the superclass namespace, not in the subclass namespace. > > Any ideas ?
You should be able to do this with a metaclass (almost certainly overkill), or with a class decorator (Python 2.6+): def with_metadata (cls): cls.m = Metadata (cls.__name__) cls.m.do_something () return cls @with_metadata class TableOne: # foo pass -- http://mail.python.org/mailman/listinfo/python-list