Observer implementations

Mike C. Fletcher mcfletch at
Wed Jun 17 14:44:42 EDT 2009

Tobias Weber wrote:
> In article <mailman.1631.1245160392.8015.python-list at>,
>  "Mike C. Fletcher" <mcfletch at> wrote:
>> See PyDispatcher for code to do this.
> That was the original problem. Got it now: if used inside the class 
> definition dispatcher.connect will raise "cannot create weak reference 
> to 'classmethod' object". Outside (using Class.method) it works fine.
Ah, I think you've got a logic problem there.  The classmethod during
class creation has no reference to the class being created, so if you
were to call *that* thing it would blow up:

class x( object ):
    def y( cls, text ):
        print text
    y( 'No you do not!' )

if you were to create a reference to *that* thing (the decorated
un-bound class method) it would never have the binding for cls, so it
wouldn't do anything.  The correct way IMO to bind after-class-creation
(e.g. by a class decorator or metaclass) where you reference a bound
class method.  If you *really* want to do it this way, you can do
something like this:

class x( object ):
    def y( cls, value ):
    dispatcher.connect( lambda *args: x.y( *args ), signal='hello' )

but ick.


  Mike C. Fletcher
  Designer, VR Plumber, Coder

More information about the Python-list mailing list