How to replace a method in an instance.

Steven W. Orr steveo at syslang.net
Fri Aug 24 13:00:09 EDT 2007


On Friday, Aug 24th 2007 at 12:26 -0400, quoth Steven W. Orr:

=>On Friday, Aug 24th 2007 at 09:12 -0700, quoth kyosohma at gmail.com:
=>
=>=>On Aug 24, 11:02 am, "Steven W. Orr" <ste... at syslang.net> 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.

-- 
Time flies like the wind. Fruit flies like a banana. Stranger things have  .0.
happened but none stranger than this. Does your driver's license say Organ ..0
Donor?Black holes are where God divided by zero. Listen to me! We are all- 000
individuals! What if this weren't a hypothetical question?
steveo at syslang.net



More information about the Python-list mailing list