将对象与对象方法一起传递给函数

时间:2015-09-02 00:06:39

标签: python class object parameters

我知道在Python中,如果你想要将两个参数传递给一个函数,一个是一个对象,另一个指定必须在该对象上调用的实例方法,那么用户可以轻松地传递该对象本身,以及方法的名称(作为字符串)然后使用对象上的getattr函数和字符串来调用对象上的方法。

现在,我想知道是否有一种方法(如在C ++中,对于那些知道的人)传递对象的位置,以及实际方法(或者更确切地说是对方法的引用,而不是方法名称)作为一个字符串)。一个例子:

def func(obj, method):
    obj.method();

我尝试过如下传递:

func(obj, obj.method)

func(obj, classname.method)

但是都不起作用(我知道的第二个是一个很长的镜头,但无论如何我都试过了)

我知道您也可以定义一个只接受该方法的函数,然后将其称为

func2(obj.method)

但我特别询问您希望引用对象本身的实例,以及要在对象上调用所需类实例(非静态)方法的引用。 / p>

编辑:

对于那些感兴趣的人,我发现了一种非常优雅的方式,并且受到了启发。通过下面接受的答案。我只是将func定义为

def func(obj, method):
     #more code here
     method(obj, parameter);     #call method on object obj

并将其称为

func(obj_ref, obj_class.method);

其中obj_class是obj_ref是。的实例的实际类。

2 个答案:

答案 0 :(得分:5)

方法只是第一个参数绑定到实例的函数。因此,你可以做类似的事情。

# normal_call 
result = "abc".startswith("a")

# creating a bound method 
method = "abc".startswith
result = method("a") 

# using the raw function 
function = str.startswith
string = "abc"
result = function(string, "a") 

答案 1 :(得分:0)

你可以搜索getattr

def apiroute(self, apiname, request):
    try:
        if callable(getattr(self,apiname)):
            return  getattr(self,apiname)(request)
        else:
            return "action is not a method"
    except:
        return "action is not exists"