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