如何从类方法传递函数指针

时间:2019-03-24 16:53:46

标签: python python-3.x

我需要将一些接受单个参数的函数列表传递给一些第三方代码,例如列表。

run_funcs([m1, m2])

我的代码(方法)是类的一部分,因此它们采用了另一个self参数。

class MyClass():
  def m1(self, o):
    return <something>
  def m2(self, o):
    return <something>

我可以以某种方式从对象实例中提取run_funcs可运行的功能列表吗? 我需要类中的方法,因为我需要一些方法可以访问的初始化(建立一些列表)。

我(认为)我应该能够从一个实例创建一个函数列表(然后将具有self),但是我不确定如何...

2 个答案:

答案 0 :(得分:3)

如果有该类的实例,则可以访问该实例上的方法:

mc = MyClass()
run_funcs([mc.m1, mc.m2])

答案 1 :(得分:1)

如果您要检查课程并打印名称, 和对具有argspec的每个方法的函数引用 两个参数中的一个,请参见下面的代码块。

在检查方法的argspec时,如果有两个args, 类方法中的第一个是“ self”,因此在调用时, 只需一个arg。

在下面的循环中:method [0]是名称, method [1]是方法参考。

我实际上没有尝试过,但是如果您需要生成函数 从运行时的类,我认为这是正确的道路 为了胜利。

import inspect

class MyClass():
    def m1(self, o):
        return 'method1'
    def m2(self, o):
        return 'method2'

mc = MyClass()

for method in inspect.getmembers(mc): 
    if isinstance(method[1], type(mc.m1)): 
        if len(inspect.getfullargspec(method[1]).args) == 2: 
            print(f'mc.{method[0]}') 
            print(f'  mc.{method[1]}') 

>>> mc.m1
>>>  mc.<bound method MyClass.m1 of <funcs_from_class.MyClass object at 0x11181e6d8>>
>>>mc.m2
>>>  mc.<bound method MyClass.m2 of <funcs_from_class.MyClass object at 0x11181e6d8>>