DRY and class variables
Thomas Jollans
t at jollybox.de
Thu Sep 8 06:22:33 EDT 2011
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
More information about the Python-list
mailing list