[Python-ideas] Module aliases and/or "real names"
Ron Adam
rrr at ronadam.com
Wed Jan 5 18:32:39 CET 2011
On 01/05/2011 06:15 AM, Nick Coghlan wrote:
> Perhaps it would focus the discussion if we picked one or two modules
> (in addition to __main__) as example cases.
>
> functools comes in two pieces - partial and reduce are implemented in
> C in the _functools module, everything else is implemented in Python
> in functools itself.
> datetime, on the other hand, is a case of a pure acceleration module -
> if _datetime is available, it is expected to completely implement the
> datetime API.
>
> _functools.partial and the classes in datetime all adopt the strategy
> of lying about their original location in __module__. This is probably
> the best available choice, as it makes pickling do the right thing.
>
> The main downside with this approach is the way it confuses things
> like inspect.getsource (for datetime, it reports the pure Python
> versions as the source code for the C accelerated versions, for
> functools.partial it gives a technically accurate, but potentially
> misleading error message. If inspect could easily *tell* that the
> accelerated versions were in use, then it could handle the situation a
> bit more gracefully).
It seems Python tries pretty hard to hide external calls, (the cause of the
confusion you mention above). It makes me wonder why python doesn't have
an extern type (or types). Then instead of them being a source of
confusion, they would be recognisable for what they are. They could have
extra attributes to enable pickle and other tools to work in a nice way.
Ron
More information about the Python-ideas
mailing list