当前位置: 首页 > 面试题库 >

动态地向Python模块添加函数

杨学真
2023-03-14
问题内容

我们的框架要求将某些功能包装在一些难看的样板代码中:

def prefix_myname_suffix(obj):
    def actual():
        print 'hello world'
    obj.register(actual)
    return obj

我认为可以使用装饰器简化此过程:

@register
def myname():
    print 'hello world'

但是,事实证明这相当棘手,主要是因为框架在模块级别上寻找某种模式的功能名称。

我在装饰器中尝试了以下操作,但无济于事:

current_module = __import__(__name__)
new_name = prefix + func.__name__ + suffix
# method A
current_module[new_name] = func
# method B
func.__name__ = new_name
current_module += func

任何帮助,将不胜感激!


问题答案:

使用之一

current_module.new_name = func

要么

setattr(current_module, new_name, func)


 类似资料:
  • 问题内容: 如何在之前或之后向现有功能添加代码? 例如,我有一堂课: 我该如何编辑类元编程,以便执行此操作 也许有某种方法可以附加另一个功能进行测试? 添加另一个功能,例如 并将原件更改为 有没有办法做到这一点? 问题答案: 如果需要,可以使用装饰器来修改功能。但是,由于它不是在函数初始定义时应用的装饰器,因此您将无法使用语法糖来应用它。 请注意,它也会修改现有实例的方法。 编辑 :使用和将装饰器

  • 问题内容: 我正在尝试动态加载我创建的模块。 现在这可以正常工作: 但是,如果我通过动态导入尝试相同的操作,它将失败。 提供的错误是: 有什么想法吗? 编辑:使用完整范围时(它的工作原理?): 这不会引发任何错误,但是,它不会加载索引模块,而是会加载“ neoform”模块。 “ struct”的结果是: 另外,作为附带的问题,我该如何在动态加载的模块中实例化一个类?(假设所有模块都包含一个通用的

  • 问题内容: 目标是创建一个行为类似db结果集的模拟类。 因此,例如,如果数据库查询使用表达式返回,那么我想看看: 刚开始我以为我可以这样做: 但返回一个属性对象。 用替换该行根本没有用。 那么在运行时创建实例属性的正确方法是什么? 问题答案: 我想我应该扩大这个答案,因为我年纪大一些并且比较聪明,并且知道发生了什么事。迟到总比不到好。 你可以动态地向类添加属性。但这很重要:你必须将其添加到类中。

  • 问题内容: 我设法在Mac上安装了spyder并可以正常运行,但是我想添加一些默认情况下不包含的模块(mahotas和pymorph)。 我通过在终端上的easy_install进行了安装,并且两者似乎都安装了,没有任何错误消息。从终端运行python并使用 import mahotas 和 import pymorph 可以正常工作而不会出现错误消息。但是,当我在spyder中的脚本中运行相同的

  • 问题内容: 我有一个空的JTable,绝对没有。我需要以某种方式动态生成其表列。我尝试使用的代码的简化版本: 但是我得到了 线程“ AWT-EventQueue-0”中的异常java.lang.ArrayIndexOutOfBoundsException:0> = 0 我究竟做错了什么? 如果有帮助,这是完整的堆栈跟踪: 问题答案: 我认为您需要将列添加到表的数据模型及其列模型中。当数据模型更改时

  • 问题内容: 我已经对StackOverflow和Google进行了彻底的搜索,但是空着。如果已经提出并解决此问题,请提前道歉。 注意: 我是jQuery的新手,所以我不确定如何自己编写。我敢肯定这是一段简单的代码,但是我不能将其束之高阁。 我想要做的是使用一个元素(例如:或类似元素)将新类(或ID,我不再挑剔!)附加到顶级popover 。我目前拥有的代码如下: jQuery的: HTML: 理想

  • 问题内容: 我有一台受信任的远程服务器,其中存储了许多自定义Python模块。我可以通过HTTP(例如,使用)作为文本/纯文本来获取它们,但是我无法将获取的模块代码保存到本地硬盘上。如何将代码作为完全可操作的Python模块(包括其全局变量和导入)导入? 我想我必须使用和模块功能的某种组合,但是我还无法使其工作。 问题答案: 看起来这应该可以解决问题:导入动态生成的模块 另外,按照ActiveSt

  • 假设我有一个空的dataframe,已经设置了列,但没有行。我从网上搜集了一些数据,所以假设我需要向空数据帧添加一个索引< code>'2176'。当我试图分配该行时,如何自动将它添加到数据库中?这是熊猫的目的还是我应该用别的东西?