2017-07-27 2 views
0

Ich erstellt ein Objekt und zugewiesene Nichtmitgliedsfunktion als Zeiger auf eine seiner Methoden. Jetzt ist es möglich, auf die Variablen zuzugreifen und Methoden des Objekts aus der Nicht-Member-Funktion aufzurufen?Wie bewerten Objektvariablen und Methoden von Nicht-Member-Funktionszeiger

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 Sie meine ich kann ein Objekt als Argument senden Funktion Zeiger und nutzen Sie es innerhalb der Nichtmitgliedsfunktion? – Viswesn

Antwort

1

Sie die process_event auf eine Instanz binden kann types.MethodType verwenden, aber in Wirklichkeit sind Sie dynamisch eine neue Member-Funktion, zum Beispiel zu erstellen:

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