Steven D'Aprano wrote:

And modules aren't callable. I've often thought they should be.

Modules are not callable because their class, module, has no __call__ instance method. But (in 3.0, which is all I will check) you can subclass module and add one.

>>> m = type(__builtins__)
>>> m
<class 'module'>
>>> dir(m)
['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> class m2(m):
        def __call__(self, *args, **kwds):
                print(self, args, kwds)

                
>>> mod = m2('mod') # only arg required by module.__init__
>>> mod(1,2,3,a=4,b=5)
<module 'mod' (built-in)> (1, 2, 3) {'a': 4, 'b': 5}
>>> mod # did not override __repr__
<module 'mod' (built-in)>

So, roll your own to your taste.

Terry Jan Reedy

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to