从字典中调用函数时出错
我只是想创建一个包含很多函数的类,这些函数需要用到类里面的一些变量来输出结果。为了提高使用效率,我想把这些函数存储在一个字典里,但不知怎么的,这样做完全不奏效……
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)
顺便说一下,我觉得通过字典调用会更慢,而不是更快,因为你首先需要从对象中获取字典,这个过程基本上和获取方法是一样的。