使用黑暗魔法来统一代表。

repromanc的Python项目详细描述


License: MITPython 3.6 and UpTests Status

:法师:恢复:僵尸:

repmancy利用黑暗魔法来做出更好的表现,尤其是在 {/str}动态创建

什么?在

在某些情况下,Python可以给出难看的repr。例如,如果我们有一个 包spam,其子模块ham定义了ham类。这个 代表是:

<class'spam.ham.Ham'>

一切都很好,但是假设我们实际上直接在Ham中导入Ham 包,以便它可以作为^{em1}访问$垃圾邮件。火腿。事实上,这是 我们向用户宣传界面,但是当他们在他们的Hams上做报告时 得到这个额外的ham模块,他们根本不在乎!我们会怎么做 喜欢看的是:

^{pr2}$

因为这就是我们定义公共API的方式,所以底层模块不是 非常相关。在

repomance修复了此问题以及其他问题。以一个价格。。。

怎么做的?在

谴责.铸造用于执行修复 代表。对于模块,只需将以下内容添加到bottom 你的模块:

if__debug__:importrepromancyrepromancy.cast(repromancy.CallingModule)delrepromancy

这将对当前模块命名空间中的所有内容执行重新执行。 请注意,cast是递归的,它将遵循它所能执行的所有操作,但只能 在cast所在的包中修改内容。在

谴责.铸造可用于大多数python对象(而不是内置对象)。在

动态类和函数

假设我们有一个^{str1}$函数,名为factory,它返回一个新的 创建了class(或者它可能是另一个函数,但是我们将使用 class在本例中):

>>>deffactory():...classClass:...pass...returnClass...>>>factory()<class'__main__.factory.<locals>.Class'>

默认的repr并不是非常有用,尤其是因为所有的*classes 除非明确定义,否则工厂生成的repr将具有相同的repr 工厂功能本身。假设在我们的模块中我们称之为 工厂化多次并给出结果的本地名称,然后 cast repomance在模块上:

>>>ClassA=factory()>>>ClassB=factory()>>>importrepromancy>>>repromancy.cast(repromancy.CallingModule)>>>ClassA<class'__main__.ClassA'>>>>ClassB<class'__main__.ClassB'>

repmancy使代表更加清晰。在

:山羊:黑暗魔法?:生物危害:

repomance顾名思义,使用一些有问题的方法来 得到它的结果。特别是,it monkey修补了一些cpython内置程序 类型,改变它们的方法。这是一个global更改为 影响所有模块和子解释器的python解释器。像这样的, 建议仅在定义了“调试”时执行重新执行。在

具体变化如下:

  • 如果 完全限定名以“<;”开头(另一个repr)
  • 函数包括在其repr中定义它们的模块,这是 与objecttypereprs一致
  • 方法显示其函数的repr,而不仅仅是名称

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

推荐PyPI第三方库


热门话题
java通过两个整数数组对正整数和负整数进行排序   java无参数和默认构造函数混淆   java加载文件MD5的最快方法是什么?   java如何在变量声明中使用带“e”的float   java将项目导入到STS iMac   java在使用图像时旋转图像   java Break语句不起作用   java提供了错误类型Spring的id   java如何为多个变量设置相同的函数属性?   JavaMaven:如何添加编译阶段后生成的资源   java HashMap已损坏/性能问题   java Hibernate SQL中间表b/w父表和子表(不同类型)   java PDFbox找不到字体:/Helv   Java:向自实现的双链接列表添加排序函数   为使用Java BouncyCastle生成的X509Certificate提供密钥使用的安全性   java Hibernate在读写方面的性能   C#相当于Java的DataOutputStream?