2011-09-03 50 views
2

識別類模塊我要編碼的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) 

這是保證A類的模塊可被導入的地方apply_method被調用。

是否需要在class_method內部創建apply_method

我需要這個原因:apply_method是一個回調。回調只包含一個函數和參數。回調需要在數百個不同的類中進行。在沒有這種通用方法的情況下,我需要爲每個類特別處理回調。

+1

您需要什麼? –

+1

什麼是「班級模塊」? – geoffspear

+2

它取決於版本,在2.x中它應該是可能的 - 但是如果我在任何代碼中看到這個我應該工作,你可以肯定我會得到作者的地址,併發揮諺語精神病患者..真的,這是一個可怕的想法。將類和方法名稱作爲一個字符串傳遞,或者只是將它們委派給一些神奇的效用函數。 – delnan

回答

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