为python类生成repr方法的快捷方式
repr的Python项目详细描述
为类生成repr方法的神奇快捷方式
- 自由软件:BSD许可证
安装
pip install repr
这个包包含一个单独的模块magic_repr,调用so 不与standart python的repr冲突。
推理
你每次写这样的代码时都会怎么想?
def__repr__(self):return""" Issue(changelog={self.changelog}, type={self.type}, comment={self.comment}, created_at={self.created_at}, resolved_at={self.resolved_at})""".format(self=self).strip().encode('utf-8')
这不是更好看了吗?
__repr__=make_repr('changelog','type','comment','created_at','resolved_at')
这会产生更好的输出:
<Issuechangelog=<Changelognamespace=u'python'name=u'geocoder'source=u'https://github.com/DenisCarriere/geocoder'>type=u'wrong-version-content'comment=u'AllMyChanges should take release notes from the web site.'created_at=datetime.datetime(2016,6,17,6,44,52,16760,tzinfo=<UTC>)resolved_at=None>
魔法的另一个优势
是递归性。如果对对象使用magic_repr,则 包含彼此,则父对象的表示将包括 正确嵌套的子对象:
<Foobars={1:<Barfirst=1second=2third=3>,2:<Barfirst=1second=2third=3>,u'три':<Barfirst=1second=2third=3>}>
所有这些都是免费的只要做__repr__ = make_repr()
用法
对于简单的情况,不需要参数就可以调用make_repr。会有结果的 哪些属性对象具有并将按字母顺序输出它们。
还可以指定要包含在“表示”中的属性:
frommagic_reprimportmake_repr__repr__=make_repr('foo','bar')
并指定一个函数,使用关键字为属性创建值:
frommagic_reprimportmake_reprclassSome(object):defis_active(self):returnTrueSome.__repr__=make_repr(active=Some.is_active)
注意,在本例中,__repr__是在类定义之后创建的。 这是因为在类内部它不能引用自己。
开发
要运行所有测试,请运行:
tox
注意,要合并来自所有tox环境的覆盖率数据,请执行以下操作:
Windows | ^{pr 9}$ |
---|---|
Other | ^{pr 10}$ |
变更日志
0.3.1(2016-06-22)
- 已修复问题1阻止生成的repr方法在多线程程序中工作。
0.3.0(2016-06-20)
- 现在make_repr可以用于递归数据结构
0.2.1(2016-06-19)
- 改进了文档
0.2.0(2016-06-19)
- 更好地处理嵌套数据结构
- 作为属性值源的可调用项。
- 一些文件。
0.1.0(2016-06-09)
- pypi上的第一个版本。