What do you call a class not intended to be instantiated
Ben Finney
bignose+hates-spam at benfinney.id.au
Sun Sep 28 04:03:45 EDT 2008
Terry Reedy <tjreedy at udel.edu> writes:
> 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.
Works fine in Python 2.5.2 also::
Python 2.5.2 (r252:60911, Aug 8 2008, 11:09:00)
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> module = type(__builtins__)
>>> module
<type 'module'>
>>> '__call__' in dir(module)
False
>>> import sys
>>> class CallableModule(module):
... def __call__(self, *args, **kwargs):
... sys.stdout.write("%(self)r, %(args)r, %(kwargs)r\n" % vars())
...
>>> '__call__' in dir(CallableModule)
True
>>> foo = CallableModule('foo')
>>> foo(1, 2, 3, a=4, b=5)
<module 'foo' (built-in)>, (1, 2, 3), {'a': 4, 'b': 5}
>>> foo
<module 'foo' (built-in)>
--
\ “There are only two ways to live your life. One is as though |
`\ nothing is a miracle. The other is as if everything is.” |
_o__) —Albert Einstein |
Ben Finney
More information about the Python-list
mailing list