[Python-Dev] Sneaky 'super' instances
Phillip J. Eby
pje@telecommunity.com
Tue, 10 Jun 2003 20:24:11 -0400
At 04:52 PM 6/10/03 -0700, Brett C. wrote:
>Bug 729103 discovered an interesting little issue; 'super' instances cause
>inspect.isroutine to return True since it also poses as a non-data
>descriptor. Now this is bad because pydoc then tries to get a __name__
>attribute out of it which it lacks because it is an instance of a class
>and not really a function or method.
>
>So, should I change inspect.isroutine to check to see if its argument is
>an instance of 'super'? Is there a robust way to check if something is an
>instance of a class which could be used instead to make this more general
>(like lacking a __name__ attribute)? Or do we just cause pydoc to spit
>out "RTM online" every time it raises an error. =)
IMO, inspect and pydoc are hopelessly broken in the post-2.2 world, in that
they are built on pre-unification assumptions. This example is just the
tip of a very nasty iceberg.
I realize I'm not answering your question; I'm just taking the opportunity
to bring back up something that Guido and I briefly discussed a couple
months ago:
http://peak.telecommunity.com/protocol_ref/protocols-example1.html
If we had a framework such as the one described, and we realized we wanted
super instances documented, we'd only need to decide how we'd like them to
be documented, instead of trying to figure out what tangled web of
assumptions pydoc and inspect (or other tools, for that matter) make about
various kinds of objects.
I hope to have some cycles soon to work on such a framework, but since it
effectively depends on both PEP 246 and an unwritten PEP for a "protocol
declaration API" like the one in PyProtocols, it would be good to get some
idea of whether the Python developer community feels this is a good
direction for me to pursue. In particular, it would be useful to have some
feedback on whether PyProtocols looks PEP-worthy (for 2.4 stdlib, I
presume). If so, then it's also reasonable for me to target a
documentation framework for that timeframe. (Specifically, a set of
interface definitions and adapters for Python built-ins, with a few simple
output tools.)