Dylan
Dylan

Reputation: 1722

Make a package work as just one import

I have a package in my project containing many *.py source files (each consisting of one class in most cases, and named by the class). I would like it so that when this package is imported, all of the files in the package are also imported, so that I do not have to write

import Package.SomeClass.SomeClass
import Package.SomeOtherClass.SomeOtherClass
import ...

just to import every class in the package. Instead I can just write

import Package

and every class is available in Package, so that later code in the file can be:

my_object = Package.SomeClass()

What's the easiest way of doing this in __init__.py? If different, what is the most general way of doing this?

Upvotes: 2

Views: 126

Answers (2)

jsbueno
jsbueno

Reputation: 110271

As Winston put it, the thing to do is to have an __init__.py file where all your classes are available in the module (global) namespace.

One way to do is, is to have a

from .myclasfile import MyClass

line for each class in your package, and that is not bad.

But, of course, this being Python, you can "automagic" this by doing something like this in __init__.py

import glob
for module_name in glob.glob("*.py"):
    class_name = module_name.split(".")[0]
    mod = __import__(module_name)
    globals()[class_name] = getattr(mod, class_name)

del glob

Upvotes: 1

Winston Ewert
Winston Ewert

Reputation: 45039

The usual method is inside package/__init__.py

from .SomeClass import SomeClass

Upvotes: 3

Related Questions