我想编写apply_method函数:
class A:
def calc(self, num):
return num
def apply_method(class_method, *args, **kwargs):
# Identify class module A from class_method: Is this possible?
# Import class module A
# Create an instance of the class A, say obj
# return obj.class_method(*args, **kwargs)
pass
class_method = A.calc
input_num = 5
return apply_method(class_method, 5)
保证在调用apply_method的任何地方都可以导入A类模块。
在apply_method
内可以获得创建class_method
所需的所有信息吗?
我需要这个的原因:apply_method是一个回调。回调只包含一个函数和参数。需要在数百个不同的类中进行回调。如果没有这种通用方法,我将需要非常专门地为每个类处理回调。
答案 0 :(得分:0)
使用解释器中的一些__方法。您需要的一切都应该以这种或那种形式提供:
In [6]: class_method = A.calc
In [7]: class_method.__class__
Out[7]: <type 'instancemethod'>
In [8]: class_method.__func__
Out[8]: <function calc at 0x101625938>
In [9]: class_method.im_class
Out[9]: <class __main__.A at 0x10161ea10>
In [10]: class_method.im_class == A
Out[10]: True
In [11]: class_method.im_class.__module__
Out[11]: '__main__'