module with __call__ defined is not callable?
Steve Holden
steve at holdenweb.com
Wed Feb 8 07:14:04 EST 2006
Fuzzyman wrote:
> Steven D'Aprano wrote:
>
>>On Wed, 08 Feb 2006 13:58:13 +1100, Delaney, Timothy (Tim) wrote:
>>
>>
>>>adam johnson wrote:
>>>
>>>
>>>>Hi All.
>>>>I was wondering why defining a __call__ attribute for a module
>>>>doesn't make it actually callable.
>>>
>>>For the same reason that the following doesn't work
>>
>>[snip example]
>>
>>>The __call__ attribute must be defined on the class (or type) - not on
>>>the instance. A module is an instance of <type 'module'>.
>>
>>That's not a _reason_, it is just a (re-)statement of fact. We know that
>>defining a __call__ method on a module doesn't make it callable. Why not?
>>The answer isn't "because defining a __call__ method on a module or an
>>instance doesn't make it callable", that's just avoiding the question.
>>
>>Someone had to code Python so that it raised an error when you try to call
>>a module object. Is there a reason why module() should not execute
>>module.__call__()? I would have thought that by the duck typing principle,
>>it shouldn't matter whether the object was a class, a module or an int, if
>>it has a __call__ method it should be callable.
>>
>
>
> It would nice if you could make modules callable.
>
Right. While we're at it, why don't we make strings callable. Calling a
string could call the function whose name (in some namespace or other)
was in the string. And we can make integers callable too - that could
just assume that the integer was the address of a function to be called.
In case you think I'm joking, I am.
Why should a module be callable? What's the advantage? Should we be able
to add two modules together, yielding a module that contains all the
code of both modules? What happens if I multiply a module by two -
presumably the result should be the same as adding a module to itself?
Perhaps we should be able to divide a module by a function?
The pursuit of orthogonality, while admirable, can lead to insanity if
pushed too far.
regards
Steve
--
Steve Holden +44 150 684 7255 +1 800 494 3119
Holden Web LLC www.holdenweb.com
PyCon TX 2006 www.python.org/pycon/
More information about the Python-list
mailing list