2021年5月6日星期四

unbind method from instance and bind to other instance

I have read this. is it possible to change: a1.show to a2.show, I mean, change the orientation of the method to point to different instance.

class A:      def __init__(self, a):          self.a = a        def show(self):          print(self.a)      a1 = A(1)  a2 = A(2)  mtd = staticmethod(a1.show)  mtd(a2)  

I want to see 2 in console. I mean, for a normal method in class, change its instance, from a1 to a2?


You may wonder why I do this, I have got a decorator to record what the instance has been through.

class Data:        def __init__(self):          self.caches = []        # do not call it outside of class, it is used to record procedure       def add_cache(self, val):          self.caches.append(val)        def clean_cache(self):          self.caches = []        def record(foo):          def wrapper(self, *args, **kwargs):              self.add_cache({foo.__name__: {'args': args, 'kwargs': kwargs}})              return foo(self, *args, **kwargs)          return wrapper  

Now, I can add this decorator to the function that needs to be recorded every call. For example, I want linear to be recorded but wrap.

class Data:      def wrap(self):          print('wrap')        @record      def linear(self, least_square=True):          pass  

Now, I am allowed to define a simulate function, which pass in another instance, and let it be through what this instance has been through.

But, my cache only recorded foo.__name__, which I need to write my own mapper to decide which function to call. This is complex. Therefore, instead of recording foo.__name__, I want to directly record foo and change its orientation from self to other.

Hope I have explained with enough clarity. I will be so glad if you give me a hand.

https://stackoverflow.com/questions/67421128/unbind-method-from-instance-and-bind-to-other-instance May 06, 2021 at 11:18PM

没有评论:

发表评论