Skip to main content

基于描述符的数据类实现

项目描述

覆盖状态 PyTest PyPI 版本 代码风格 粘合剂

__init__ZnInit -基于描述符的自动生成

该包为dataclass类似结构提供了一个基类,并添加了Descriptors__init__主要功能是根据选定的描述符自动生成仅关键字。描述符可以例如覆盖__set____get__具有与它们相关联的自定义元数据。ZnTrack使用该ZnInit包来启用从文件中延迟加载数据以及区分不同类型的描述符,例如或. 可以在目录中找到一个示例。zn.paramszn.outputsexamples

例子

最简单的用例是复制类似数据类的结构。

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

using 的好处在于ZnInit使用描述符。您可以对类进行子zninit.Descriptor类化,并且只将某些 kwargs 添加__init__init_descriptors: list. 此外,还有一种post_init方法可用于在初始化类后立即运行代码。

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

一个好处ZnInit是它还允许继承。

from zninit import ZnInit, Descriptor

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

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

zninit-0.1.1.tar.gz (11.3 kB 查看哈希)

已上传 source

内置分布

zninit-0.1.1-py3-none-any.whl (11.9 kB 查看哈希)

已上传 py3