Skip to main content

Descriptor based dataclass implementation

Project description

Coverage Status PyTest PyPI version code-style Binder

ZnInit - Automatic Generation of __init__ based on Descriptors

This package provides a base class for dataclass like structures with the addition of using Descriptors. The main functionality is the automatic generation of an keyword-only__init__ based on selected descriptors. The descriptors can e.g. overwrite __set__ or __get__ or have custom metadata associated with them. The ZnInit package is used by ZnTrack to enable lazy loading data from files as well as distinguishing between different types of descriptors such as zn.params or zn.outputs. An example can be found in the examples directory.

Example

The most simple use case is a replication of a dataclass like structure.

from zninit import ZnInit, Descriptor


class Human(ZnInit):
    name: str = Descriptor()
    language: str = Descriptor("EN")


# This will generate the following init:
def __init__(self, *, name, language="EN"):
    self.name = name
    self.language = language


fabian = Human(name="Fabian")
# or
fabian = Human(name="Fabian", language="DE")

The benefit of using ZnInit comes with using descriptors. You can subclass the zninit.Descriptor class and only add certain kwargs to the __init__ defined in init_descriptors: list. Furthermore, a post_init method is available to run code immediately after initializing the class.

from zninit import ZnInit, Descriptor


class Input(Descriptor):
    """A Parameter"""


class Metric(Descriptor):
    """An Output"""


class Human(ZnInit):
    _init_descriptors_ = [Input] # only add Input descriptors to the __init__
    name: str = Input()
    language: str = Input("DE")
    date: str = Metric()  # will not appear in the __init__

    def _post_init_(self):
        self.date = "2022-09-16"


julian = Human(name="Julian")
print(julian) # Human(language='DE', name='Julian')
print(julian.date)  # 2022-09-16

One benefit of ZnInit is that it also allows for inheritance.

from zninit import ZnInit, Descriptor

class Animal(ZnInit):
    age: int = Descriptor()
    
class Cat(Animal):
    name: str = Descriptor()
    
billy = Cat(age=4, name="Billy")

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

zninit-0.1.6.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

zninit-0.1.6-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file zninit-0.1.6.tar.gz.

File metadata

  • Download URL: zninit-0.1.6.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.8.13 Linux/5.4.0-135-generic

File hashes

Hashes for zninit-0.1.6.tar.gz
Algorithm Hash digest
SHA256 c61f9e53741160c0e424660f609ff3a2e17d4a79d22e9a43f43aa48d3ce475ac
MD5 a351382239f8fa146b8b76c4d9aaec40
BLAKE2b-256 3dc5e2e9cfd94643e0daff25f1def404e2284f3db60c943994831a817a161f47

See more details on using hashes here.

File details

Details for the file zninit-0.1.6-py3-none-any.whl.

File metadata

  • Download URL: zninit-0.1.6-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.8.13 Linux/5.4.0-135-generic

File hashes

Hashes for zninit-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 060de296f23efaed22dbc43490d07e3392804166fe0b840b79a9743a4c6ed3f6
MD5 30c5606191059353138d9672d75a2a95
BLAKE2b-256 81fd24faee55e9183aaa21948cbca921cd04109e3c2455d909cc7a41ba6f2d3c

See more details on using hashes here.

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