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