在我的头上缠绕一点点麻烦。我相信答案很简单,但它一直在推动着我。TypeError:B2()只需要1个参数(给出0)...为什么这个函数被完全调用为named或变量
在下面的代码:
class f1():
valnum=1
def A1(self):
self.valnum=5
print self.valnum
def B2(self):
self.valnum=10
print self.valnum
funlist=[A1,B2]
x=f1
x()
x().A1()
x().funlist[1]()
A1()
会如预期执行,但不B2()
。最终,我想让代码从列表中调用一个随机函数,但TypeError: B2() takes exactly 1 argument (0 given)
一直在阻碍我。为什么这是最好的解决方案。
谢谢。
事实上,'funlist'包含*功能*,而不是实例方法或结合的方法。在从类对象中检索函数之前,函数不会成为未绑定的方法,并且在创建funlist时类对象还不存在。 – 2012-03-27 10:52:15
谢谢,这是一个有用的说明。 – 2012-03-27 11:02:37
或者,将funlist的定义移动到'__init__'中并让它获取实例方法并成为一个实例属性。 – agf 2012-03-27 11:09:30