Nevermind, I found the problem... Thanks,
kj In <[EMAIL PROTECTED]> kj <[EMAIL PROTECTED]> writes: >I've tried a bazillion ways to code dynamically generated methods, >to no avail. >The following snippet is a very simplified (and artificial) demo >of the problem I'm running into, featuring my latest attempt at >this. The idea here is to use __getattr__ to trap any attempt to >invoke a nonexistent method, have it return a generic handler called >_auto which creates the new method dynamically, invokes it, and >"installs" it in the class, so that subsequent calls to the same >method go directly to the newly created method, instead of to >__getattr__. It is this last step, the "installation" of the new >method, that is giving me problems. >class A( object ): > def __getattr__( self, name ): > self._auto_name = name > return self._auto > def hello( self, name ): > print "hi! my name is %s" % name > > def _auto( self, *args ): > name = self._auto_name > def m( self, *args ): self.hello( name ) > m( self, *args ) > m = classmethod( m ) > setattr( A, name, m ) >x = A() >x.foo() # ok >x.foo() # bombs >>>> reload(test) hi! my name is foo Traceback (most recent call >last): > File "<stdin>", line 1, in ? File "test.py", line 19, in ? > x.foo() File "test.py", line 12, in m > self.hello( name ) TypeError: unbound method hello() must be >called with A instance as first argument (got str instance instead) >>>> >I'm sure that the problem is with my naive attempt to add a method >to class A dynamically (in the last two lines of the definition of >_auto). What's the right way to do this? >Thanks! >kj >-- >NOTE: In my address everything before the first period is backwards; >and the last period, and everything after it, should be discarded. -- NOTE: In my address everything before the first period is backwards; and the last period, and everything after it, should be discarded. -- http://mail.python.org/mailman/listinfo/python-list