Thanks for pointing out all those mistakes. I think I'm already starting to grasp all of the python magic going on in there.

Parenthetical: I don't normally recommend this style, since it
obscures the fact that you're using a custom metaclass to the user.
That is something the user probably would benefit from knowing, if for
no other reason than so they can make a mental note about where to
look first if something goes wrong.  I prefer to make the user use the
__metaclass__ attribute.

Really just personal preference I think. I'm not really a friend of declaring variables if there is a more "intuitive" way.

class HBar(Decorator):
        def __init__(self, number):
                Decorator.__init__(self)

Ok, at this point you have to ask yourself what you want to do,
because the solution you choose will involve trade-offs.

Yes, it was probably a bad example. I decided not to call the Decorator 's __init__ method in my new version (which I have posted as a reply to the reply of Maric Michaud).

You will note that Decorator does not define __init__.  In fact,
object.__init__ will be called, which does nothing.  If you think that
all classes with DecoratorType as their metaclass will be a direct
subclass of Decorator, you can get away with not calling
Decorator.__init__ at all.

Now, inside my new version, I have a class which inherits from both Decorator and Window, out of which the __init__ for Decorator is not called. Does this prove to be a problem?

Probably the best piece of advice is "Don't try to use Decorator
pattern".  :)

Well, I decided on the decorator pattern, because I want to be able to change the behavior of classes during run-time. I did not really find any other pattern which would let me do that.

Regards,
Thomas K.

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to