[Python-Dev] Definining properties - a use case for class decorators? (original) (raw)

Josiah Carlson jcarlson at uci.edu
Mon Oct 24 12:09:07 CEST 2005


Nick Coghlan <ncoghlan at gmail.com> wrote:

Josiah Carlson wrote: > You can get the same semantics with... > > class NAME((TYPE), ARGS): > BLOCK > > And a suitably defined . Remember, not every X line function should be > made a builtin or syntax. And this would be an extremely fragile hack that is entirely dependent on the murky rules regarding how Python chooses the metaclass for the newly created class. Ensuring that the metaclass of the class returned by "" was always the one chosen would be tricky at best and impossible at worst.

The rules for which metaclass is used is listed in the metaclass documentation. I personally never claimed it was perfect, and neither is this one...

class NAME(_(TYPE, ARGS)): BLOCK

But it does solve the problem without needing syntax (and fixes any possible metaclass order choices).

Even if it could be done, I'd never want to see a hack like that in production code I had anything to do with.

That's perfectly reasonable.

(I put the metaclass after the keyword, because, unlike a function decorator, the metaclass is invoked before the class is created, and because you're only allowed one explicit metaclass)

Perhaps, but because the metaclass can return anything (in this case, it returns a property), being able to modify the object that is created may be desireable...at which point, we may as well get class decorators for the built-in chaining.



More information about the Python-Dev mailing list