Skip to main content

一个点可访问的字典(一个 la JavaScript 对象)

项目描述

Bunch 是一个支持属性样式访问的字典,类似于 JavaScript。

>>> b = Bunch()
>>> b.hello = 'world'
>>> b.hello
'world'
>>> b['hello'] += "!"
>>> b.hello
'world!'
>>> b.foo = Bunch(lol=True)
>>> b.foo.lol
True
>>> b.foo is b['foo']
True

字典方法

A Bunch 是dict的子类;它支持dict所做的所有方法:

>>> b.keys()
['foo', 'hello']

包括update()

>>> b.update({ 'ponies': 'are pretty!' }, hello=42)
>>> print repr(b)
Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')

以及迭代:

>>> [ (k,b[k]) for k in b ]
[('ponies', 'are pretty!'), ('foo', Bunch(lol=True)), ('hello', 42)]

和“splats”:

>>> "The {knights} who say {ni}!".format(**Bunch(knights='lolcats', ni='can haz'))
'The lolcats who say can haz!'

序列化

Bunches 愉快且透明地序列化为 JSON 和 YAML。

>>> b = Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')
>>> import json
>>> json.dumps(b)
'{"ponies": "are pretty!", "foo": {"lol": true}, "hello": 42}'

如果存在 JSON 支持(jsonsimplejson),Bunch将有一个toJSON()方法,该方法将对象作为 JSON 字符串返回。

如果您安装了PyYAML,Bunch 会尝试向各种 YAML 表示器注册自己,以便可以透明地转储和加载 Bunches。

>>> b = Bunch(foo=Bunch(lol=True), hello=42, ponies='are pretty!')
>>> import yaml
>>> yaml.dump(b)
'!bunch.Bunch\nfoo: !bunch.Bunch {lol: true}\nhello: 42\nponies: are pretty!\n'
>>> yaml.safe_dump(b)
'foo: {lol: true}\nhello: 42\nponies: are pretty!\n'

此外,Bunch 实例将有一个toYAML()方法,该方法使用yaml.safe_dump()返回 YAML 字符串。此方法还替换__str__如果存在,因为我发现它更具可读性。您可以通过简单的赋值恢复到 Python 对__repr__的默认使用: Bunch.__str__ = Bunch.__repr__。Bunch 类还有一个静态方法Bunch.fromYAML(),它从 YAML 字符串中加载一个 Bunch。

最后,Bunch 可以轻松且递归地转换为 ( unbunchify()Bunch.toDict() ) 并从 ( bundleify()Bunch.fromDict() ) 转换为普通的dict,从而可以轻松地以其他格式干净地序列化它们。

各种各样的

  • 从这个模块导入 *是安全的。你会得到:Bunchbundleifyunbunchify

  • 充足的文档测试:

    $ python -m bunch.test -v

反馈

在http://github.com/dsc/bunch打开一张票,或者在dsc @ less给我发一封电子邮件 _

项目详情


下载文件

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

源分布

bundle-1.0.1.zip (11.1 kB 查看哈希

已上传 source

bundle-1.0.1.tar.gz (6.6 kB 查看哈希

已上传 source