Python decorator for automatic initialization instance attributes
Project description
autoinit
Python decorator for automatic initialization instance attributes
What
from autoinit import autoinit
@autoinit
class X:
def __init__(self, a, b, c, d:int, e=99.99, f='some_default_value'):
print("__init__ do some another things")
x = X(42, 100, 500, None)
# Output: "__init__ do some another things"
print(x.__dict__)
# Output: {'a': 42, 'b': 100, 'c': 500, 'd': None, 'e': 99.99, 'f': 'some_default_value'}
How
$ pip install autoinit
Where
Tested in:
- CPython: 2.7, 3.5-3.8
- Pypy: 2.7, 3.5, 3.6
- Jython: 2.7
...but with a high probability will work with other implementations as well.
Why
A lot of elementary assignments inside __init__
are a fairly frequent and rather dull case.
class FiveDimensionRecord:
def __init__(self, x:int, y:int, z:int, u:int,
v:int, dt:typing.Optional[datetime]=None, description:str=''):
self.x = x
self.y = y
self.z = z
self.u = u
self.v = v
self.dt = dt or datetime.now()
self.description = description
Dataclasses do not make it much more fun, mainly because you still cannot declare attributes in one line
@dataclass
class FiveDimensionRecord:
x: int
y: int
z: int
u: int
v: int
dt: 'typing.Any' = None
description: str = ''
def __post_init__(self):
self.dt = self.dt or datetime.now()
With autoinit
it looks much more compact and minimalistic
class FiveDimensionRecord:
@autoinit
def __init__(self, x:int, y:int, z:int,
u:int, v:int, dt=None, description:str=''):
self.dt = self.dt or datetime.now()
Options
-
@autoinit(exclude='attr')
or@autoinit(exclude=['attr1', 'attr2]')
: skip specified attributes -
@autoinit(no_warn=True)
: do not throw warning if decorator applied to non-__init__
method -
@autoinit(reverse=True)
: invert the order of actions - first call the wrapped method (which is usually__init__
), and then do assignment
The decorator itself can be equally applied to both the __init__
method and the entire class.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for autoinit-1.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | d0ddd20a2ead44e64a3607ea2b9000c0e37dcf2c2d659ea2e7b7501f3457e349 |
|
MD5 | 17ebace37a6e650e89a426ec09cf00fe |
|
BLAKE2b-256 | aa965074ed55eef6723f09b35c562d4bb67997d6e83ae17724e47f2754f80617 |