在python中传递方法

Ale*_*lex 2 python

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

如何在Python中将方法作为参数传递

这是我尝试过的一个简单例子.

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

passMethod('Hi', lower)
Run Code Online (Sandbox Code Playgroud)

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

问候,亚历克斯

Kar*_*tel 5

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

然后,在你的函数中,obj.method意味着查找method属性obj.它与命名的参数无关method,并且不能以这种方式工作.相反,由于您有一个未绑定的方法,self因此明确地将该对象作为参数传递:因此,method(obj).这给了我们:

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

passMethod('Hi', str.lower)
Run Code Online (Sandbox Code Playgroud)

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

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

passMethod('Hi', 'lower')
Run Code Online (Sandbox Code Playgroud)