On Thursday 27 May 2004 02:00 pm, Passin, Tom wrote:
In Python, you can override a method of an instance just by assigning it to another function, like this -
class Test1: def f1(self): return "f1() of Test1"
def f1(): return "f1() of instance"
T1 = Test1() T1.f1 = f1
Running this within the Python interpreter, try the following -
T1.f1()
'f1() of instance'
Is this what you had in mind?
That's the idea, this is essentially what I did in my original post, except that your demo creates a function and not a bound method (e.g. it doesn't automatically make the instance the first argument). I initially tried this, which failed because it wasn't really a method and had no way of obtaining its context. Then I learned how to convert a function into an instance method in python, which works great until the transaction commits to the ZODB. Unfortunately, the ZODB won't store the method because it's 'unpicklable', the same is true for a plain function. I vaguely recall being able to do this successfully in an earlier version of Zope (<=2.6.3, using python 2.1), though it was something of an accident and ended up causing a few problems (all of which were entirely my fault). It seems strange that the ZODB would subsequently have lost this ability. Thanks, Alec Mitchell