Steven D'Aprano <[EMAIL PROTECTED]> wrote:
>> Then if foo is a class, we probably all agree that bar is a method of
>> foo.
>
> There are funny edge cases (e.g. bar might be an attribute with a
> __call__ method) but in general, yes, bar would be a method of foo.
>
But that 'funny edge case' is exactly the point here: if foo is a module
then bar probably is an attribute with a __call__ method.
modules are not special in any way, except that you cannot subclass them.
Oops, sorry I got that wrong. Modules are not special in any way, they can
have methods as well as functions:
>>> import string
>>> class MyModule(type(string)):
def bar(self, param):
print "In method bar of %r, param=%r" % (self, param)
>>> foo = MyModule('foo', 'This is the foo module')
>>> exec """def baz(param):
print "Function baz, param=%r" % (param,)
""" in foo.__dict__
>>> foo.bar(42)
In method bar of <module 'foo' (built-in)>, param=42
>>> foo.baz(42)
Function baz, param=42
>>> foo.bar
<bound method MyModule.bar of <module 'foo' (built-in)>>
>>> foo.baz
<function baz at 0x01160830>
>>> help(foo)
Help on module foo:
NAME
foo - This is the foo module
FILE
(built-in)
>>> foo.__file__='foo.py'
>>> foo
<module 'foo' from 'foo.py'>
>>> sys.modules['foo'] = foo
>>> del foo
>>> import foo
>>> foo.bar('hello')
In method bar of <module 'foo' from 'foo.py'>, param='hello'
--
http://mail.python.org/mailman/listinfo/python-list