在python中传递方法

时间:2012-05-14 21:34:39

标签: python

我在函数中传递方法时遇到问题。我已经看过上一篇文章了。

How do I pass a method as a parameter in Python

以下是我尝试过的一个简单示例。

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

passMethod('Hi', lower)

最后,我将使用它来帮助编写处理GIS(地理信息系统)数据的函数。数据就像一个数组。我想在数组中添加一个新列NAME1。然后该数组有一个方法来调用列array.NAME1。

此致 亚历

3 个答案:

答案 0 :(得分:5)

当您提供名称lower时,这意味着在全局命名空间中查找名称lower。它不存在,因为您正在寻找lower字符串方法(str类)。拼写为str.lower

然后,在您的函数中,obj.method表示查找method的{​​{1}}属性。它与名为obj的参数无关,并且无法以这种方式工作。相反,由于您有一个未绑定的方法,请明确地将该对象作为method参数传递:因此,self。这给了我们:

method(obj)

或者,我们可以使用字符串作为方法的名称来查找传入的对象。看起来像是:

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

passMethod('Hi', str.lower)

答案 1 :(得分:1)

我不确定你想要什么,但将方法名称作为字符串传递更有意义:

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

passMethod('Hi', 'lower')

答案 2 :(得分: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!'

另一个问题是你究竟要传递什么来告诉代码你想要哪种方法。可能是一根绳子?如果是这样,请尝试类似

的内容
def pass_method(obj, method_name):
    return getattr(method_name)