在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类/继承的解决方案。
非常感谢
沃尔夫冈
答案 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)
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