在任何模块/对象上调用某个函数

时间:2014-02-13 03:03:36

标签: javascript python

在JavaScript中,我有多个不同的模块(对象),其函数名为“one”。

test_module1 = { 
    one: function () {
       alert('fun mod1_one successful'); 
    },
    two: function () {
       alert('fun mod1_two successful'); 
    }
}
test_module2 = { 
    one: function () {
       alert('fun mod2_one successful'); 
    },
    two: function () {
       alert('fun mod2_two successful'); 
    }
}

workingObj = test_module1;
workingObj["one"]();

现在,如果我在变量“workingObj”中有其中一个模块/对象,我想调用 对此对象的函数“一”,我调用workingObj [“one”]();。

目前我学习Python。用这种语言类似吗?

我需要一个没有Python类/继承的解决方案。

非常感谢

沃尔夫冈

2 个答案:

答案 0 :(得分:4)

绝对!您所要做的就是利用“getattr”并执行以下操作

class MyObj(object):
    def func_name(self):
        print "IN FUNC!"

my_obj = MyObj()

# Notice the () invocation
getattr(my_obj, "func_name")() # prints "IN FUNC!"

答案 1 :(得分:1)

您可以使用oprerator.methodcaller

from operator import methodcaller
call_one = methodcaller("one")

现在,您可以使用get_one从任何对象获取one并将其称为

call_one(obj)

优势超过getattr

除了{I} methodcaller之外,您不必为每个对象调用getattr,因此它非常具有可读性和惯用性。创建一次并根据需要随意使用它。可以使用任意数量的对象。

例如,

class MyClass1(object):  # Python 2.x new style class
    def one(self):
        print "Welcome"

class MyClass2(object):  # Python 2.x new style class
    def one(self):
        print "Don't come here"

from operator import methodcaller
call_one = methodcaller("one")

obj1, obj2 = MyClass1(), MyClass2()
call_one(obj1)    # Welcome
call_one(obj2)    # Don't come here