我只想创建一个包含许多函数的类,这些函数需要为该输出导入类的一些变量。为了提高使用效率,我想将这些函数存储在字典中,但不知何故根本就没有...
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 ???
发生了什么答案 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)
具有保持课堂清洁的优势。