Steven W. Orr wrote: > Ok. I have a collection of classes that are produced by a factory. They > all inherit from a baseclass. One (maybe more) of the classes inherits a > method that he shouldn't. All I want is to be able to change that > particular class so that he will have the special method that he needs > instead of the default one that he inherits. I was thinking that instead > of making a special class for CC to inherit from which would give him his > special replacement method(s), I could simply assign them in a manner > which would more easily lend itself to later being table driven. > > If I had a choice, I'd rather not do it in init. Instead, I'd rather be > able to say something like > CC.m1 = repmeth > but since in the real world, CC inherits from his baseclass, the above > assignment causes the baseclass to be altered. :-( > > Please tell me if I need to provide more.
def f1(self): print 'f1' def f2(self): print 'f2' def classfactory(replacements=None): class _C(object): def doit(self): print 'doit' def doit2(self): print 'doit2' if replacements is not None: for fname, f in replacements.items(): setattr(_C, fname, f) return _C Aclass = classfactory() Aclass().doit() Aclass2 = classfactory({'doit':f1, 'doit2':f2}) Aclass().doit2() Aclass2().doit2() Here's the output: py> def f1(self): ... print 'f1' ... py> def f2(self): ... print 'f2' ... py> def classfactory(replacements=None): ... class _C(object): ... def doit(self): ... print 'doit' ... def doit2(self): ... print 'doit2' ... if replacements is not None: ... for fname, f in replacements.items(): ... setattr(_C, fname, f) ... return _C ... py> Aclass = classfactory() py> Aclass().doit() doit py> py> Aclass2 = classfactory({'doit':f1, 'doit2':f2}) py> Aclass().doit2() doit2 py> Aclass2().doit2() f2 James -- http://mail.python.org/mailman/listinfo/python-list