Steven W. Orr wrote: > On Friday, Aug 24th 2007 at 12:26 -0400, quoth Steven W. Orr: > > =>On Friday, Aug 24th 2007 at 09:12 -0700, quoth [EMAIL PROTECTED]: > => > =>=>On Aug 24, 11:02 am, "Steven W. Orr" <[EMAIL PROTECTED]> wrote: > =>=>> In the program below, I want this instance to end up calling repmeth > =>=>> whenever inst.m1 is called. As it is now, I get this error: > =>=>> > =>=>> Hello from init > =>=>> inst = <__main__.CC instance at 0x402105ec> > =>=>> Traceback (most recent call last): > =>=>> File "./foo9.py", line 17, in ? > =>=>> inst.m1() > =>=>> TypeError: repmeth() takes exactly 1 argument (0 given) > =>=>> > =>=>> #! /usr/bin/python > =>=>> def repmeth( self ): > =>=>> print "repmeth" > =>=>> > =>=>> class CC: > =>=>> def __init__( self ): > =>=>> self.m1 = repmeth > =>=>> print 'Hello from init' > =>=>> > =>=>> def m1 ( self ): > =>=>> print "m1" > =>=>> > =>=>> inst = CC() > =>=>> inst.m1() > => > =>=>Remove "self" from repmeth as it's not required in a function, only in > =>=>functions that are defined within a class. Of course, a function in a > =>=>class is also know as a method. > => > =>Sorry. I need repmeth to have self passed to it automatically if it's > =>called. I didn't mean to obfuscate the problem by not making a reference > =>to self in repmeth. > => > =>Am I being clear? > > On Friday, Aug 24th 2007 at 18:44 +0200, quoth Wildemar Wildenburger: > > =>Steven W. Orr wrote: > =>> Sorry. I need repmeth to have self passed to it automatically if it's > =>> called. I didn't mean to obfuscate the problem by not making a > reference > =>> to self in repmeth. > =>> > =>> Am I being clear? > =>> > =>> > =>Sort of. Maybe you fare better if you state what you want to achieve, > =>instead of how you think you should do it. Chances are you don't need to > =>replace a method in __init__, but there's another, less tricky way. > > 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. > > Is there a reason you don't just create a subclass for the one that needs to call repmeth?
class CC(object): def m1(self): print "m1" def m2(self): print "m2" class SpecialCC(CC): def m1(self): print "something else!" if __name__ == '__main__': a = CC() b = SpecialCC() for instance in a, b: instance.m1() instance.m2() --Output-- m1 m2 something else! m2 Is that what you're looking for, mas o menos? Cheers, Cliff -- http://mail.python.org/mailman/listinfo/python-list