2

在 python 中,我想将对象方法导出为普通函数。该对象将被关闭。如下所示:

from functools import partial

class A(object):
    def __init__(self,a):
        self.a = a

    def m(self,b):
        return self.a+b

    def exportm(self):
        return lambda b,self=self: self.m(b)
        #return partial(self.m,self=self)

f = A(10).exportm()

print f(5)

这很好用,可以按预期打印 15。但是,如果我将 return-lambda-line 替换为注释行,它将失败并出现以下错误:

TypeError: m() got multiple values for keyword argument 'self'

我知道使用 functools 比使用 lambda 表达式更干净。所以我想知道如何使用functools中的部分或其他工具来做到这一点。

4

2 回答 2

6

self.m已经绑定了,所以没有必要传递self=self给它。简单地返回self.m。如需更多参数,请使用partial(self.m, ...)

class A(object):
    def __init__(self, a):
        self.a = a

    def m(self, b, c):
        return self.a + b + c

    def exportm(self):
        return partial(self.m, 300)

f = A(10).exportm()
print f(5)
于 2012-08-17T10:17:51.993 回答
0

遵循KISS原则。没有必要使用让你的代码看起来更专业的东西。正如 thg435 已经说过return self.m的那样。

你的代码越简洁,理解它就越容易,无论是你自己,当你阅读你的代码时,比如一个月,还是其他开发人员。

于 2012-08-17T10:22:19.410 回答