"Terry Hancock" <[EMAIL PROTECTED]> wrote:
> On Monday 12 September 2005 10:09 pm, [EMAIL PROTECTED] wrote:
> > I like to keep my classes each in a separate file with the same name of
> > the class. The problem with that is that I end up with multiple imports
> > in the beginning of each file, like this:
> >
> > from foo.Bar import Bar
> > from foo.Blah import Blah
> > from foo.Zzz import Zzz
> >
> > What I'd like to do would be to replace it all by a single line:
> >
> > from foo.* import *
> >
> > Of course, that doesn't work, but is there a way to do something like
> > that?
>
> Apparently "foo" is already a package defined using __init__.py,
> so you know about that part already.
>
> Just change its contents to read:
>
> from Bar import Bar
> from Blah import Blah
> from Zzz import Zzz
If you do this often or have lots of classes you want to import this
way, you could automate it:
#======== Foo.py ====================================
class Foo(object):
pass
#======== Bar.py ====================================
class Bar(object):
pass
#======== test.py ====================================
from autoimport import autoimport
autoimport("Foo","Bar")
if __name__ == '__main__':
print Foo
print Bar
# output:
# <class 'Foo.Foo'>
# <class 'Bar.Bar>
#======== autoimport.py ====================================
import sys
def autoimport(*modulenames):
'''
Perform the equivalent of "from XXX import XXX" for every
module XXX in modulenames. In case of packaged modules, it is
equivalent to "from XXX.YYY.ZZZ import ZZZ"
'''
caller_frame = sys._getframe(1)
caller_locals = caller_frame.f_locals
# import every module XXX and add the XXX.XXX object
# to the caller's locals
for name in modulenames:
# in case of packaged modules A.B.C, make sure to import C
module = __import__(name, caller_frame.f_globals,
caller_locals, [name])
# extract 'C' from 'A.B.C'
attribute = name[name.rfind('.')+1:]
if hasattr(module,attribute):
caller_locals[attribute] = getattr(module,attribute)
#==================================================
Or even better, forget about the braindead java restriction of one
class per file and organize your code as it makes more sense to you.
HTH,
George
--
http://mail.python.org/mailman/listinfo/python-list