Python decorator for automatic initialization instance attributes
Project description
autoinit
Python decorator for automatic initialization instance attributes
What
import autoinit # same as `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.11
- Pypy: 2.7, 3.5-3.9
- 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. Default:[]
-
@autoinit(no_warn=True)
: do not throw warning if decorator applied to non-__init__
method. Default:False
. -
@autoinit(reverse=True)
: invert the order of actions - first call the wrapped method (which is usually__init__
), and then do assignment. Default:False
.
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.1.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3bd9d74330517a1796f16eb45ce9e5efe3a746030d3bdf78f46b64b58c150493 |
|
MD5 | 55cffe969d52241e4326014d6ca675d5 |
|
BLAKE2b-256 | 50627647028c77e67c2fb75c803dc5a4490707932379e2297abb485075ab6abc |