2017-07-27 61 views
0

對象的變量和方法我創建一個對象,並分配了非成員函數作爲一個指向它的方法之一。現在是有可能從非成員函數訪問的變量和調用對象的方法?如何評估從非成員函數指針

def process_event(): 
     # How to assess a and b variables and invoke 
     # foo method specific to that object? 
     return /*something */ 

class Testing(object): 
     def __init__(self, a, b, process_event): 
      self.a = a 
      self.b = b 
      self.process_event_ptr = process_event 

     def foo(self) 
      return self.a + self.b 

def main():  
    obj1 = Testing(10, 20, process_event) 
    obj2 = Testing(100, 200, process_event) 
    print obj1.process_event_ptr() 
    print obj2.process_event_ptr() 

if __name__ == "__main__" 
    main() 
+0

@anon你的意思是我可以給一個對象作爲參數爲一個函數指針,使非成員函數中使用的呢? – Viswesn

回答

1

您可以將綁定process_event使用types.MethodType的實例,但實際上你是動態創建一個新的成員函數,例如:

import types 

def process_event(instance): 
    return instance.foo() 

class Testing(object): 
    def __init__(self, a, b, process_event): 
     self.a = a 
     self.b = b 
     self.process_event_ptr = types.MethodType(process_event, self) 

    def foo(self): 
     return self.a + self.b 

obj1 = Testing(10, 20, process_event) 
obj2 = Testing(100, 200, process_event) 
print(obj1.process_event_ptr()) 
print(obj2.process_event_ptr()) 

Out[]: 
30 
300