I found this, but that's not quite what I want to do.
I want to import all the classes in all the files in a directory. Basically, I want to replace this:
from A import *
from B import *
from C import *
With something dynamic, so that I don't have keep editing my __init__.py
every time I add another file.
The glob
solution seems to be the equivalent of
import A
import B
import C
which is not the same at all.
You can do something like this, although keep in mind isinstance(cls, type)
only works with new-style classes.
import os, sys
path = os.path.dirname(os.path.abspath(__file__))
for py in [f[:-3] for f in os.listdir(path) if f.endswith('.py') and f != '__init__.py']:
mod = __import__('.'.join([__name__, py]), fromlist=[py])
classes = [getattr(mod, x) for x in dir(mod) if isinstance(getattr(mod, x), type)]
for cls in classes:
setattr(sys.modules[__name__], cls.__name__, cls)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With