Maric Michaud wrote: > Le Jeudi 08 Juin 2006 15:15, Duncan Booth a écrit : >> but the more usual way is just to call the original method directly in the >> base class. >> >> class SqliteAdapter(BaseClass): >> def create_table(self, *args) >> self.table_evolve(*args) >> result = BaseClass.create_table(self, *args) >> return result >> > > Yeah, this the right way to reuse ancestor's implementation of a method. > >> If that isn't what you are trying to achieve you'll have to explain more. > I'm not a ruby programmer, but I understood it like this : the prupose is to > modify the behavior of an existing third-party class, in all application > (even in existing third party modules), without any code modifications > (traditional patch) in those modules.
yes, you've understood right. > Your proposal is not as good here, assuming BaseClass is defined in module > toto, you can still do toto.BaseClass = SqliteAdapter, but you must ensure > that this code is imported before any other where classes inherit from > BaseClass. The one I porpose in my other post is robust, several packages can > even patch the same method with no side effects. Your suggestion is most possibly the relevant construct. I'll post a note after changing the implementation. Thank's a lot! . -- http://lazaridis.com -- http://mail.python.org/mailman/listinfo/python-list