2017-07-27 8 views
0

オブジェクトを作成し、非メンバ関数をそのメソッドの1つのポインタへのポインタとして割り当てました。これで、変数にアクセスし、非メンバ関数からオブジェクトのメソッドを呼び出すことは可能ですか?非メンバ関数ポインタからオブジェクト変数とメソッドを評価する方法

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

あなたはtypes.MethodTypeを使用してインスタンスにprocess_eventをバインドすることができますが、実際には、あなたが動的に新しいメンバ関数を作成している、例えば:

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 
関連する問題