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

Python动态添加到函数

汝岳
2023-03-14
问题内容

如何在之前或之后向现有功能添加代码?

例如,我有一堂课:

 class A(object):
     def test(self):
         print "here"

我该如何编辑类元编程,以便执行此操作

 class A(object):
     def test(self):
         print "here"

         print "and here"

也许有某种方法可以附加另一个功能进行测试?

添加另一个功能,例如

 def test2(self):
      print "and here"

并将原件更改为

 class A(object):
     def test(self):
         print "here"
         self.test2()

有没有办法做到这一点?


问题答案:

如果需要,可以使用装饰器来修改功能。但是,由于它不是在函数初始定义时应用的装饰器,因此您将无法使用@语法糖来应用它。

>>> class A(object):
...     def test(self):
...         print "orig"
...
>>> first_a = A()
>>> first_a.test()
orig
>>> def decorated_test(fn):
...     def new_test(*args, **kwargs):
...         fn(*args, **kwargs)
...         print "new"
...     return new_test
...
>>> A.test = decorated_test(A.test)
>>> new_a = A()
>>> new_a.test()
orig
new
>>> first_a.test()
orig
new

请注意,它也会修改现有实例的方法。

编辑 :使用和将装饰器的args列表修改为 更好的 版本args``kwargs



 类似资料:
  • 问题内容: 我有一个问题,我不知道如何将textview添加到gridlayout。我有一个xml: 并希望动态地执行此xml代码。我怎样才能做到这一点?我知道如何创建textview,但我不知道如何添加到gridlayout … 问题答案: 您不能将代码粘贴到其中,并且需要对其进行测试和更改以使其适合(它不仅会起作用)。但这应该给您大致的想法。

  • 问题内容: 我知道我可以通过执行以下操作来向对象动态添加实例方法: 稍后我可以打电话给我,自我将被正确绑定,一切正常。 现在,我的问题是:如何做完全相同的事情来获得用@property装饰新方法的行为? 我猜是这样的: 但是,这样做会返回一个属性对象。 问题答案: 在描述对象需要住 类 , 未 在 实例中 ,有你想要的效果。如果您不想更改现有的类以避免更改其他实例的行为,则需要创建“每个实例的类”

  • 问题内容: 我有一个使用插件体系结构的Java Web应用程序。我想知道是否有人可以通过Web应用程序运行时通过Serlvet映射到servletconfig来添加servlet的解决方案?这样的想法是,可以将一个类添加到/ WEB-INF / classes文件夹中,并使其成为Servlet,而无需重新启动Web应用程序。同样,如果用户选择删除“插件”,则让代码从servletconfig中删除

  • 问题内容: 我将此组合框添加到面板中。如果直接在数据库中添加一些项目,则希望那些新添加的项目显示在组合框中。 我可以在调试时看到这些值,但是这些值不会出现在我的组合框中。 如何在不关闭面板的情况下将那些新添加的值放入组合框? 问题答案: 如何使用ComboBoxModel?像这样…

  • 因此,我的问题是面板被插入到JScrollPane中,这些面板的大小正在减小,但没有滚动条。 这是我的代码,我已经播种很远:

  • 我是JavaFX新手。我想与我的场景互动 例如:当我单击一个按钮时,我添加了一个新按钮,Textfield。。在里面。然而,我搜索了一下,却没有找到满意的答案! 我的fxml文件: 我的控制器: }