[Python-3000] Fixing super anyone?
Phillip J. Eby
pje at telecommunity.com
Fri Apr 20 20:26:53 CEST 2007
At 10:53 AM 4/20/2007 -0700, Guido van Rossum wrote:
>Also, what arguments are passed to the hook? For this purpose the
>class object is the only thing needed -- but is that always
>sufficient?
I'd want to have the attribute name as an argument, too, at least for other
uses of the hook. PEAK and Chandler both have special metaclasses to do
this sort of attribute-class association, and I believe Paste does too (it
might be some other project(s) by Ian Bicking, e.g. SQLObject or
FormEncode). It comes up pretty much anywhere that people have some sort
of object-attribute system. Having a built-in hook for this would be nice.
Ideally, the return value of the hook should then be used as the
descriptor, rather than the original one; PEAK uses an approach like this
to do things like:
class Whatever:
foo = bar = DelegateTo('otherattribute')
where the foo and bar attributes are being set up to delegate to the foo
and bar attributes of self.someattribute. (i.e., foo and bar end up with
separate descriptors, because the DelegateTo descriptor's association hook
is called twice, once with 'foo' and once with 'bar', and the return values
become the actual descriptors used in the class.)
One question, however, would be whether it should refer to the class
*after* decoration, or before. For the super() use case, it would
presumably need to be the *decorated* class, which might make things a bit
more complicated.
I also wonder if this hook mightn't be usable to implement abstractmethod
as well?
More information about the Python-3000
mailing list