python:export方法作为函数关闭对象

lif*_* pi 2 python lambda closures partial functools

在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)
Run Code Online (Sandbox Code Playgroud)

这很好用并按预期打印15.但是如果我用注释行替换return-lambda-line,它将失败,从而产生以下错误:

TypeError: m() got multiple values for keyword argument 'self'
Run Code Online (Sandbox Code Playgroud)

我知道使用functools比使用lambda表达式更干净.所以我想知道如何使用functools中的部分或其他工具来完成此操作.

geo*_*org 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)
Run Code Online (Sandbox Code Playgroud)