从字典中调用函数时出错

2 投票
2 回答
1216 浏览
提问于 2025-04-16 12:17

我只是想创建一个包含很多函数的类,这些函数需要用到类里面的一些变量来输出结果。为了提高使用效率,我想把这些函数存储在一个字典里,但不知怎么的,这样做完全不奏效……


class A(object):

    var = 'hello'
    def g(self,x):
        return self.var
    dict = {'g':g}


if __name__ == "__main__":

    a = A()
    print a.g(0)
    print a.dict['g'](0)

输出结果

hello
    print a.dict['g'](0)
TypeError: g() takes exactly 2 arguments (1 given)

在字典里,函数g到底发生了什么呢???

2 个回答

0

除了Jan Hudec的回答,你还可以完全不使用dict,而是用一个叫做getattr()的内置函数,像这样:

class A(object):

    var = 'hello'
    def g(self,x):
        return self.var


if __name__ == '__main__':
    a = A()
    print a.g(0)
    print getattr(a, 'g')(0)

这样做的好处是可以让你的类保持整洁。

4

当你把一个函数当作方法来调用时,它会自动把调用它的对象作为第一个参数传进去。但如果你从字典中取出这个函数,就不是这样了。你需要手动调用它。

print a.dict['g'](a, 0)

顺便说一下,我觉得通过字典调用会更慢,而不是更快,因为你首先需要从对象中获取字典,这个过程基本上和获取方法是一样的。

撰写回答