这个答案展示了如何将带参数的函数传递给另一个函数。另一方面,这个答案显示了如何从实例中调用类方法。这两个例子都很好用。然而,在我的情况下,如果我将一个外部函数作为类方法传递并从实例中调用它,就会抛出错误。
class Abc:
@classmethod
def setbar(cls, foo):
cls.bar = staticmethod(foo)
def __init__(self):
print('Object created')
def obmeth(self, *args):
print(self.bar(args))
def myfun(a, b):
return a + b
Abc.setbar(myfun)
ob = Abc()
ob.obmeth(10, 20)
上面的代码抛出了以下错误:
Object created
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-9a580c2c4d21> in <module>
15 Abc.setbar(myfun)
16 ob = Abc()
---> 17 ob.obmeth(10, 20)
<ipython-input-8-9a580c2c4d21> in obmeth(self, *args)
8
9 def obmeth(self, *args):
---> 10 print(self.bar(args))
11
12 def myfun(a, b):
TypeError: myfun() missing 1 required positional argument: 'b'
很明显,有两个值10和20通过obmeth((传递给myfun((,那么是什么导致了这个错误呢?
更新
错误是由于以下打字错误引起的
如@Barmar 所指出的,self.bar(args)
应为self.bar(*args)
正如@Barmar所指出的,我应该解开这些参数。因此,用print(self.bar(*args))
代替print(self.bar(args))
解决了这个问题。