我需要将一些接受单个参数的函数列表传递给一些第三方代码,例如列表。
run_funcs([m1, m2])
我的代码(方法)是类的一部分,因此它们采用了另一个self
参数。
class MyClass():
def m1(self, o):
return <something>
def m2(self, o):
return <something>
我可以以某种方式从对象实例中提取run_funcs
可运行的功能列表吗?
我需要类中的方法,因为我需要一些方法可以访问的初始化(建立一些列表)。
我(认为)我应该能够从一个实例创建一个函数列表(然后将具有self),但是我不确定如何...
答案 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>>