【问题标题】:Pass object along with object method to function将对象与对象方法一起传递给函数
【发布时间】:2015-09-02 00:06:39
【问题描述】:

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

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

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

我尝试过如下传递:

func(obj, obj.method)

或作为

func(obj, classname.method)

但两者都不起作用(我知道的第二个有点远,但我还是尝试了)

我知道你也可以只定义一个只接受该方法的函数,然后调用它为

func2(obj.method)

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

编辑:

对于那些感兴趣的人,我发现了一种非常优雅的方式,受到下面接受的答案的“启发”。我只是将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 是其实例的实际类。

【问题讨论】:

    标签: python class object parameters


    【解决方案1】:

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

    # 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") 
    

    【讨论】:

    • 感谢您的出色回答!请参阅上面的编辑,了解我想出的跟进您的答案。越来越多地发现 Python 到底是什么优雅的语言。
    【解决方案2】:

    你可以搜索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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-22
      • 2012-01-20
      • 2014-07-15
      • 1970-01-01
      • 2016-01-14
      相关资源
      最近更新 更多