Python - 调用存储在dict中的对象的函数

时间:2015-02-13 12:11:47

标签: python dictionary

我有一个Class,它创建包含函数dict的对象。这些函数在类中定义。

class Foo:

    def __init__(self, name, functions):
        self.name = name
        self.functions = functions

    def myFunction1(self):
        print self.name
        return 'foo'

    def myFunction2(self):
        return 'bar'

在另一个文件中,我实例化了上一个类的对象,我想运行dict中的一个函数。

from foo import Foo

myFunctions = Foo.('a name', {0 : Foo.myFunction1, 1 : Foo.myFunction2})

myFunctions.functions[0]()

我有这个错误: TypeError:未绑定方法myFunction1()必须以Foo实例作为第一个参数调用。

我明白当我执行最后一行时,我只是调用函数而不用Foo的对象作为第一个参数调用它。但我不能这样写:

myFunctions.myFunctions.functions[0]()

如何调用存储在dict属性中的此类函数?

4 个答案:

答案 0 :(得分:3)

我真的不明白你想用这个函数字典实现什么,但请注意instance.function()等同于Class.function(instance)。在前者中,instance隐式传递为self参数;在后者中,您明确地传递它。

因此,您可以尝试以下方法。

foo = Foo({0 : Foo.myFunction1, 1 : Foo.myFunction2})
print foo.functions[0](foo)

答案 1 :(得分:0)

您可以将函数称为字典,如下所示:

tmp = Foo()
tmp.functions={0:tmp.myFunction1, 1:tmp.myFunction2}
myFunctions = tmp.functions
print myFunctions.functions[0]()

答案 2 :(得分:0)

如果需要对象方法,最好的方法是编写另一个调用正确函数的函数

class Foo:

    def __init__(self, functions):
        self.functions = functions

    def myFunction1(self):
        return 'foo'

    def myFunction2(self):
        return 'bar'

    def run_func(self, func_key, *args, **kwargs):
        func_name = self.functions.get(func_key)
        if func_name and hasattr(self, func_name):
            return getattr(self, func_name)(*args, **kwargs)
        else:
            return None

fun_dict = {0:'myFunction1', 1:'myFunction2'}
a = Foo(fun_dict)
print a.run_func(0)

你可以用这种方式发送偶数参数。

def myFunction1(self, name):
    return name

print a.run_func(0, "test")

这将通过myFunction1

打印test

答案 3 :(得分:0)

这是在功能之间切换的最简单方法:

       dict = {0 : Foo.myFunction1, 1 : Foo.myFunction2}
       function = fn_dict.get(0)
       function(parameters)