2

関数内のメソッドの受け渡しに問題があります。私はすでにこの前の投稿を見ました。

Pythonでメソッドをパラメーターとして渡すにはどうすればよいですか

これが私が試したことの簡単な例です。

def passMethod(obj, method):
    return obj.method()

passMethod('Hi', lower)

最後に、これを使用して、GIS(地理情報システム)データを処理する関数を作成します。データは配列のようなものです。配列に新しい列NAME1を追加したいと思います。次に、配列には、列array.NAME1を呼び出すメソッドがあります。

よろしく、アレックス

4

3 に答える 3

5

名前を付けると、それはグローバル名前空間でlower名前を検索することを意味します。文字列のメソッド(クラス)lowerを探しているので、そこにはありません。それは綴られています。lowerstrstr.lower

次に、関数で、の属性obj.methodを検索することを意味します。、という名前のパラメータとは関係がなく、そのように機能することはできません。代わりに、バインドされていないメソッドがあるため、オブジェクトをパラメーターとして明示的に渡します。つまり、。それは私たちに与えます:methodobjmethodselfmethod(obj)

def passMethod(obj, method):
    return method(obj)

passMethod('Hi', str.lower)

または、渡されたオブジェクトを検索するメソッドの名前として文字列を使用することもできます。それは次のようになります:

def passMethod(obj, method):
    return getattr(obj, method)()

passMethod('Hi', 'lower')
于 2012-05-14T21:40:10.847 に答える
1

何が必要か正確にはわかりませんが、メソッド名を文字列として渡す方が理にかなっています。

def passMethod(obj, method_name):
    return getattr(obj, method_name)()

passMethod('Hi', 'lower')
于 2012-05-14T21:42:34.090 に答える
0

最初の問題は、メソッドを返す前にメソッドを呼び出していることです。obj.method()を返す代わりに、obj.methodを返すだけです。

class Foo:
    def bar(self):
        print 'foobar!'

def pass_bar(obj):
    return obj.bar

f = Foo()
method = pass_bar(f)
method() # prints 'foobar!'

もう1つの質問は、必要なメソッドをコードに伝えるために正確に何を渡しているかです。文字列かも?もしそうなら、次のようなものを試してください

def pass_method(obj, method_name):
    return getattr(method_name)
于 2012-05-14T22:13:13.897 に答える