On Aug 10, 5:27 pm, Eric Snow <ericsnowcurren...@gmail.com> wrote:
> On Wed, Aug 10, 2011 at 8:33 AM, Fuzzyman <fuzzy...@gmail.com> wrote:
> > On Aug 5, 12:29 pm, Ryan <heni...@yahoo.com> wrote:
> >> In the context of descriptors, the __set__ method is not called for
> >> class attribute access. __set__ is only
> >> called to set the attribute on an instance instance of the owner class
> >> to a new value, value. WHY?
>
> > It's an unfortunate asymmetry in the descriptor protocol. You can
> > write "class descriptors" with behaviour on get, but not on set.
>
> > As others point out, metaclasses are an ugly way round this
> > (particularly given that *basically* a class can only have one
> > metaclass - so if you're inheriting from a class that already has a
> > custom metaclass you can't use this technique).
>
> Keep in mind that you can still do something like this:
>
> class XMeta(Base.__class__):
>     "Customize here"
>
> class X(Base, metaclass=XMeta):
>     "Do your stuff."
>
> They you would put your descriptor hacking in XMeta and still take
> advantage of the original metaclass.

Yeah, the way round the "more than one metaclass problem" is to have
your new metaclass inherit from the first one. That's not a general
purpose solution though.

Michael
--
http://voidspace.org.uk/
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to