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 を使用する方がクリーンであることを理解しています。したがって、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たように。

コードがスリムになればなるほど、たとえば 1 か月以内にコードを読んだときに自分自身と他の開発者の両方が理解するのが簡単になります。

于 2012-08-17T10:22:19.410 に答える