Как оценить переменные и методы объекта по указателю на функцию, не являющуюся членом

Я создал объект и назначил функцию, не являющуюся членом, как указатель на один из его методов. Теперь можно получить доступ к переменным и вызвать методы объекта из функции, не являющейся членом?

 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()

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
Другие вопросы по тегам