0

念のために2つのクラスがあります。

tests.py:

class Functions:
    def mapping(func, x):
        return func(x)

そして私は以下のコードを実行しようとします:

import testing

def doubleMe(data):
    return data * data

res = stream.Functions.map(testdouble, [1,2,3,4,5])
print res

コードを実行しようとすると、エラーが発生しました

TypeError:バインドされていないメソッドmapping()は、最初の引数として関数インスタンスを使用して呼び出す必要があります(代わりに関数インスタンスを取得します)

ここで何がうまくいかなかったのかよくわかりませんが、アドバイスをいただけますか?ありがとう!

4

2 に答える 2

3

Python 関数は常に、クラス関数/メソッドの最初の引数としてクラスまたはインスタンスを取ります。

class Functions:
    def mapping(self, func, x):
        return func(x)

または、クラスのインスタンスを常に作成したくない場合は、次の手順を実行して、インスタンス メソッドではなくクラス メソッドを作成します。

class Functions:
    @classmethod
    def mapping(cls, func, x):
        return func(x)

@オペレーターは、さらにググりたいトピックの場合、関数 decorator を作成します

于 2012-11-02T16:28:14.813 に答える
1

私はあなたのコードをあまり理解できませんでした(それは不完全で、名前が一致していません:マッピング->マップ、ストリーム->テスト)、しかしエラーメッセージから、あなたはのインスタンスを構築する必要があるようです最初に機能します。したがって、次のようなものが必要です。

func = stream.Functions()
func.map(testdouble, [1, 2, 3, 4, 5])

Kurtが指摘したように、(インスタンスメソッドとクラスメソッドのどちらが必要かを決定した後)map/mappingメソッドを適切に宣言する必要もあります。

于 2012-11-02T16:24:14.517 に答える