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
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 |