lallous
2/21/2010 8:23:00 AM
On Feb 20, 6:08 pm, "Martin v. Loewis" <mar...@v.loewis.de> wrote:
> >> class C1:
>
> >> # Pure virtual
> >> def cb(self, param1, param2):
> >> """
> >> This is a callback
>
> >> @param param1: ...
> >> @param param2: ...
> >> """
> >> raise NotImplementedError, "Implement me"
>
> >> # Dispatcher function that calls 'cb' only if 'cb' is implemented in
> >> child classes
> >> def dispatcher(c):
> >> if hasattr(c, 'cb'):
> >> c.cb("Hello", "World")
>
> >> dispatcher(C2())
> >> dispatcher(C3())
>
> >> What I want is the ability to have the dispatcher() not to call 'cb'
> >> if it was not implemented in one of the child classes.
>
> >> Please advise.
>
> > There is nothing more beyond that what you already did. You can raise a
> > NotImplementedError for classes that don't implement the method. That's it.
>
> That's not true. Currently, the hasattr() call would report that cb is
> available, when it is actually not implemented. It would be possible to
> do something like
>
> if hasattr(c, 'cb') and not is_pure(c.cb):
> c.cb("Hello", "World")
>
> is_pure could, for example, look at a function attribute of the
> callback. You'd write something like
>
> @pure_virtual
> def cb(self, param1, param2):
> not_implemented
>
> Regards,
> Martin
Hello Martine,
Can you elaborate more on how to use the mechanism you described?
Thanks,
Elias