从类函数中识别类模块

时间:2011-09-03 21:03:06

标签: python

我想编写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是一个回调。回调只包含一个函数和参数。需要在数百个不同的类中进行回调。如果没有这种通用方法,我将需要非常专门地为每个类处理回调。

1 个答案:

答案 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__'