将方法绑定到对象运行时后期绑定

尼莱什

我知道python中循环中的后期绑定,但是我找不到解决此问题的方法。

def bind_method(object, methods):

    for method in methods:
        def my_method():
            result = method()

            return result

        setattr(object, method.__name__, my_method)

def test():
    class A: pass

    def bar(): 
        return "BAR"

    def foo(): 
        return "FOO"

    a = A()
    bind_method(a, [bar, foo])

    assert a.foo() == "FOO"
    assert a.bar() == "BAR"


if __name__ == "__main__":
    test()

我尝试了partialinfunctools但没有成功:(

AKS

当调用a.bar() my_method被调用并且因为for循环已经结束时,methodfor的值methods列表中的最后一个元素,因此您总是得到"FOO"结果。

要检查,您可以添加打印对帐单:

def my_method():
    print(method.__name__) # this will always print `foo`
    result = method()

但是当我直接设置它时:

def bind_method(object, methods):
    for method in methods:
        setattr(object, method.__name__, method)

它确实起作用。


使用functools.partial

from functools import partial

def bind_method(object, methods):

    for method in methods:
        def my_method(a_method):
            print(a_method.__name__) # this print correct method name
            result = a_method()
            return result

        setattr(object, method.__name__, partial(my_method, method))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Dotvvm 运行时绑定到“对象”类型

在运行时将Hibernate实体绑定到表

纯虚函数是早期绑定(编译时)还是后期绑定(运行时)?

使用后期绑定而不是早期绑定时的字典运行时错误

了解android文档:处理运行时片段“不应传递绑定到活动的对象”

作为服务运行时将 MongoDB 绑定到 IP 地址

在运行时将文件复制并 chown 到 docker 绑定安装

Guice-在运行时基于定义的InjectionPoints将泛型类绑定到实例

解决运行时缺少Java泛型的问题,将超类型绑定到子类实例

如何将ICommand绑定到运行时内置的MenuItem

Angular2:将<select>组合框绑定到从ngOnInit()中的API检索到的对象列表时,运行时错误

在运行时将游戏对象绑定到Unity 3D中的另一个游戏对象

Java-方法在运行时绑定

是否可以在运行时绑定方法?

如何在MVC视图中使用jquery将数据绑定到组合框运行时?

在运行时将两个字段值绑定到一个xrlabel

在运行时绑定属性

在运行时更改Guice绑定

运行时的ObservableCollection数据绑定

Knockoutjs 在运行时更改绑定

PHP 运行时动态绑定变量

Angular 4中的运行时绑定

无法将事件绑定到对象方法

ASP.NET Core MVC - 在运行时绑定到模型

ASP.NET Gridview文本框在运行时绑定到变量

运行时错误:引用绑定到“int”类型的空指针(合并函数)

将 DataGridComboBoxColumn 绑定到对象

如何在运行时使用Seekbar拇指将按钮与文本绑定

WPF。在运行时访问绑定集合