从字典调用函数时出错

时间:2011-02-22 09:35:40

标签: python

我只想创建一个包含许多函数的类,这些函数需要为该输出导入类的一些变量。为了提高使用效率,我想将这些函数存储在字典中,但不知何故根本就没有...


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 :(得分:4)

当一个函数被调用为方法时,它隐式地将调用者作为第一个参数。但是当你把它从dict中拉出来时,情况并非如此。你必须打电话

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

另一方面,我希望通过dict调用更慢,而不是更快,因为你首先需要从对象获取dict,这本身基本上等同于获取方法。

答案 1 :(得分:0)

除了Jan Hudec的回答之外,您还可以使用getattr()内置函数完全没有dict,如下所示:

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)

具有保持课堂清洁的优势。