Skip to main content

Dataclasses reinvented, dependency injection, Python 3.7+

Project description

Class With auto-init

from auto_init import auto_init_class

@auto_init_class
class Point:
    x: int
    y: int

p = Point(y=-5)
assert p.x == 0
assert p.y == -5
assert str(p) == '<Point x=0, y=-5>'

You Can Still Have Your __init__

@auto_init_class
class Point:
    x: int
    y: int

    def __init__(self, *args):
        if args:
            self.x, self.y = args

Singletons

@auto_init_class(singleton=True)
class AppModel:
    pass

@auto_init_class
class AppPresenter:
    model: AppModel

@auto_init_class
class AppView:
    model: AppModel

@auto_init_class
class App:
    model: AppModel
    view: AppView
    presenter: AppPresenter

app = App()
assert isinstance(app.view.model, AppModel)
assert app.view.model is app.presenter.model

Access to the Base Class

@auto_init_class
class Point:
    x: int
    y: int


primitive_point = Point(auto_init_base=True)
initialised_point = Point(x=10)

assert isinstance(primitive_point, Point._auto_init_base)
assert not hasattr(primitive_point, 'x')

assert isinstance(initialised_point, Point)
assert initialised_point.x == 10

Context

Context allows setting custom providers.

from auto_init import AutoInitContext, auto_init_class

@auto_init_class
class Line:
    start: Point
    end: Point

context = AutoInitContext(providers={Point: Point3d})

with context:
    assert isinstance(Point(), Point3d)
    assert isinstance(Line().start, Point3d)

Also, singletons apply only to the current context.

Inheritance Works

@auto_init_class
class Point:
    x: int
    y: int

@auto_init_class
class Point3d(Point):
    z: int

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

auto-init-0.0.1.tar.gz (4.3 kB view hashes)

Uploaded Source

Built Distribution

auto_init-0.0.1-py3-none-any.whl (4.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page