将带参数的函数传递给另一个函数,然后通过方法进行调用是抛出错误的



这个答案展示了如何将带参数的函数传递给另一个函数。另一方面,这个答案显示了如何从实例中调用类方法。这两个例子都很好用。然而,在我的情况下,如果我将一个外部函数作为类方法传递并从实例中调用它,就会抛出错误。

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))解决了这个问题。

最新更新