从字符串加载python属性

pyloader的Python项目详细描述


从字符串加载python属性

json格式

pyloader使用json可序列化格式 (可序列化)python对象的形式:

{'foo': # (arbitrary) object name,
 {'args': ['positional', 'arguments'],
  'kwargs': {'keyword': 'arguments},
  'path': 'dotted.or.file.path:ObjectName'},
 'bar': ... } # etc

对象的实例化方式如下:

ObjectName(*args, **kwargs)

在对象不被实例化的情况下(例如 独立函数argskwargs将不是 不存在或将不存在(null在json中)。

INI格式

pyloader还具有一个ini格式,该格式被转换为json 但增加了一些方便的功能。一个简单的对象是 表示为:

[foo:dotted.or.file.path:ObjectName]
. = positional, arguments
keyword = arguments

.表示以逗号分隔的位置参数 名单。剩下的(键,值)对成为关键字参数。这个 节名称包含对象名称(例如foo),后跟 :后跟加载路径。像json、点路径或文件 可以使用路径。另外,其他(可插入的)加载路径是 可用:

  • 重写加载程序:您可以使用像[foo:bar]这样的节名来 使用bar对象中的变量重写bar对象中的变量 foo

    [foo:bar]
    . = cats, dogs
    type = count
    
    [bar:%(here)s/some/path.py:MyObject]
    . = elephants
    type = concatenate
    

    上面的结果为foo生成了一个json blob,比如:

    {'foo': {'args': ['elephants', 'cats', 'dogs'],
             'kwargs': {'type': 'concatenate'},
             'path': '/location/of/ini/file/some/path.py:MyObject'}}
    

    args已扩展。kwargs将被重写。

  • 包装器:除了覆盖模式之外,您还可以包装 对象:

    [foo:bar:baz]
    

    这将创建一个对象foo,它将对象baz包装在 由bar给出的模式。在这种情况下,将提供bar。 一个特殊的变量,%(app)s

    您也可以这样做:

    [foo:bar:hi,hello,x=1,y=2:%(here)/objects.py:MyClass]
    

此外,.ini文件可能包括其他.ini文件。这就允许 特定.ini文件意图的封装:

[include:%(here)s/some/file.ini]

ini文件有几个方便的变量:

  • %(此处)s:ini文件所在目录的位置
  • %(object)s:用于包装器

消费者可以提供其他变量。

.ini decorator语法摘要

  1. [foo:%(here)s/objects.py:MyClass]:创建类型为的对象fooMyClass使用节中给出的参数
  2. [foo:bar]:使用来自部分的模式创建对象foobar但用bar部分重写任何参数 本节中的内容
  3. [foo:bar:%(here)s/objects.py:MyClass]:创建对象foo 它是MyClass的一个实例,包装在由 bar模式。bar传递了一个特殊参数, %(object)s,它是包装对象( MyClass实例)。在内部,包装的对象由 整个节名(foo:bar:%(here)s/objects.py:MyClass)。这个 本节中的参数适用于MyClass(...)
  4. [foo:bar:app=%(object)s,value=1:%(here)s/objects.py:MyClass]: 与3相同。但是用bar部分中的值重写 app=%(object)svalue=1

节名称语法

  • [name:resource]:创建名为name的对象,其中resource 是节名或path,如JSON Format中所述。 如果resource是另一个节名,则选项 将覆盖resource部分中给定的选项,并新建 将创建名为name的对象。如果section是 一个路径,将按照path给定的方式创建一个对象 给定的选项。
  • [name:decorator:resource]:创建名为name的对象,其中 由resource给定的对象传递给decorator。重写 加载如[name:reource]所述。匿名者 对象是为包装的 反对。所以这个表单为JSON Format生成两个部分。 decoratorname位于同一命名空间中。
  • [名称:decorator:overrides:resource]:类似于 [名称:decorator:resource],但将overides应用于 decorator节。overrides是格式字符串 foo,bar,fleem=5

杰夫·哈梅尔 http://k0s.org/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在EclipseIndigo上安装新的Glassfish服务器   java打印组织的最短方法是什么。w3c。多姆。文件发送到stdout?   安卓 java。lang.NullPointerException:尝试在oncreate方法中的null对象引用上调用virtual方法   linux java,我的线程无一例外地终止了,为什么?   JSON和Lombok构造函数的java问题Jackson反序列化   Spring引导升级后,java无法实例化自定义库的数据源   输入Kotlin中Java Scanner的等价物是什么?   列表vs数组作为java中递归的参数   创建名为“FilterService”的bean时发生java错误:通过字段“filterDAO”表示的未满足的依赖关系   如何在Java(基本上是Android)中将指纹图像的字节数组转换为iso 19794_2?   java如何使用基本适配器单击每个位置   java如何更新数据库显示消息“您的数据库已更新,没有任何错误,但实际上我的数据库未更新”   不同比例的安卓屏幕设备的java程序   java Android For循环,全局静态列表与本地列表