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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file autoinit-1.1.1.tar.gz.
File metadata
- Download URL: autoinit-1.1.1.tar.gz
- Upload date:
- Size: 6.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c276ca9d5a7962416bc5b8d23e5acb9afad9880c5ec130c2cf4139b2b2f5836
|
|
| MD5 |
ea00f7e88929578a86735f48ccff52b0
|
|
| BLAKE2b-256 |
40f62803316df6781430897abb8016ea1db9762d8e267ca0cb56d756efd5761b
|
File details
Details for the file autoinit-1.1.1-py2.py3-none-any.whl.
File metadata
- Download URL: autoinit-1.1.1-py2.py3-none-any.whl
- Upload date:
- Size: 5.5 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3bd9d74330517a1796f16eb45ce9e5efe3a746030d3bdf78f46b64b58c150493
|
|
| MD5 |
55cffe969d52241e4326014d6ca675d5
|
|
| BLAKE2b-256 |
50627647028c77e67c2fb75c803dc5a4490707932379e2297abb485075ab6abc
|