Metaclasses and class variables
Mike C. Fletcher
mcfletch at rogers.com
Thu Aug 4 10:24:30 EDT 2005
Jan-Ole Esleben wrote:
>Yes, that works, but it is unfortunately not an option (at least not a
>good one).
>
>Is there no way to create a class variable that exists during
>definition of the class? (I cannot imagine there isn't, since
>technically it's possible and manually it can be done...)
>
>Ole
>
>
The metaclass hook occurs *after* class definition, anything using a
side-effect of a metaclass hook then, *must* occur after the execution
of the metaclass hook. At the time you want to write classvar.append
the "class" is only a namespace, so, if you really need this feature
you'll need to look elsewhere for at least *part* of the solution.
A global "classvar" that, when appended to, caches values until your
metaclass is called and transfers the cache to the class should *work*,
but egads that's ugly compared to just classvar = [] . I guess what I'd
ask is *why* is avoiding that single line so important. It could be
there's a reasonable answer, but the amount of machinery required to
avoid it is going to be significant.
class meta( type ):
newClassVar = []
def __new__( cls, name, bases, dictionary ):
dictionary[ 'classvar' ] = cls.newClassVar[:]
del cls.newClassVar[:]
return super( meta, cls ).__new__( cls, name, bases, dictionary )
__metaclass__ = meta
classvar = meta.newClassVar
or something along those lines...
Um, ick, but HTH,
Mike
--
________________________________________________
Mike C. Fletcher
Designer, VR Plumber, Coder
http://www.vrplumber.com
http://blog.vrplumber.com
More information about the Python-list
mailing list