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

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应用程序在测试设备上调试时工作正常,但在发布版apk中没有,它没有获得post。来自firebase的类变量   java Android:从主活动按钮确定在listview中选中哪个复选框   在Spring中添加@OneToOne注释时启动ApplicationContext时发生java错误   用JAVA Android实现矩阵计算的最快方法   SpringJava语义有没有更好的编写方法?   java从hashmap中减去两个值后返回最小差值的键?   Java中的静态初始化顺序:Netty 4.0.7的例外   java如何检查用户输入是否为字符串   循环Java计数单词索引   java如何使用以下代码将视频流传输到Android异步Http服务器?   java如何在jtable的所有行中循环   java如何使用maven将unicode插入mysql   java使用安卓加速远程数据检索   java试图模拟麦克风(javax.sound.sampled)   swing SwingWorker从不归还任何东西?(爪哇)   首次在Android Studio上未加载java LibGDX文件   java如何在多个Mysql服务器上设置限制和偏移?   如何防止从java连接到mongodb时登录控制台?