How to replace a method in an instance.

James Stroud jstroud at mbi.ucla.edu
Fri Aug 24 12:44:42 EDT 2007


Steven W. Orr wrote:
> 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. 

At least you are consistent in that you obfuscate every question.

Here's what you seem to want:



import types

def repmeth(self):
   print "repmeth"

# inherit from object!
class CC(object):
   def __init__(self):
     self.m1 = types.MethodType(repmeth, self)
     print 'Hello from init'
   def m1(self):
     print 'm1'

inst = CC()
inst.m1()



Output:

py> import types
py>
py> def repmeth(self):
...   print "repmeth"
...
py> # inherit from object!
py> class CC(object):
...   def __init__(self):
...     self.m1 = types.MethodType(repmeth, self)
...     print 'Hello from init'
...   def m1(self):
...     print 'm1'
...
py> inst = CC()
Hello from init
py> inst.m1()
repmeth



James



More information about the Python-list mailing list