lundi 24 août 2015

Python - How to override a method of a member object? - Composition

In python 3.4 I have a member object through composition.

I would like to override one of it's member functions.

def class Foo:
    def __init__(self, value):
        self.value = value
    def member_obj.baz(baz_self, arg):
        print("my new actions on {}".format(arg))
        Foo.member_obj.baz(arg) #the original function

foo_inst = Foo(2)
bar = Bar(*bar_parameters) #from a third party module
setattr(foo_inst, "member_obj", bar) #it did not "stick" when I did foo_inst.member_obj = bar

foo_inst.member_obj.baz("some argument")

It does not make sense to inherit from the Bar class. I also only want this different behavior to occur if the object is inside Foo. I use Bar in many other places and would like to retain the same way of calling the method. I.e. I would like to avoid wrapping it in Foo.baz.

Is it even possible to do something like the def member_obj.baz and is it a good idea?

It would be similar to this: http://ift.tt/1Jgt6kV

Aucun commentaire:

Enregistrer un commentaire