[EMAIL PROTECTED] a écrit :
> Hi,
>
> Let's say you have a bunch of instatiated objects of the same class on
> your hands and you want to had some functionality to them.
Then I'd just do it.
> I'm facing this situation while working with PyGTK and libglade to
> create a GUI. Libglade creates a whole object tree representing the
> GUI out of an XML file, and a bunch of GtkComboBox objects are
> instantiated. I don't like the way GtkComboBox objects works, so I'd
> like them to have some extra methods. Inheriting and extending
> GtkComboBox is pointless because I'm not the one instantiating the
> class. I only came up with three possibilities:
>
> A) Adding my methods to the objects in a for-loop
>
> B) Adding my methods to the GtkComboBox class (I tried this and it
> seems to work)
I don't have much experience with PyGTK, but unless GtkComboBox is a
very special class object, it should JustWork(tm).
> C) Create a GtkComboBoxExtended class inheriting from GtkComboBox
> and change the instances' class in a for-loop.
That's another possible solution, but it requires more work.
> I'm kind of inclined to C. B sounds dangerous
Why ? Eventually confusing if not well documented, but mostly harmless
IMHO. Python is dynamic by nature, and there's no reason to not take
advantage of this fact.
> and A is plain ugly.
It's also the more complicated and less efficient solution IMHO (unless
you want different implementations of the same method on a per-instance
basis...).
> I'm very new to this and I'm sure there is a well-established pythonic
> way to solve this problem, so I'm appealing for your vast collective
> wisdom to point me in the path of righteousness.
As far as I'm concerned, and if it's just a matter of adding a couple of
methods, I'd go for B, which is the SimplestThingToDo(tm).
Now if it's a big complicated project with a rather unstable team, C is
perhaps a bit more explicit since it makes obvious that this not a
pristine GtkComboBox no more. But even then, it's always possible to
monkeypatch a class in a more or less documented way (explict mentions
of the patch in added/replaced/extended methods and in __repr__()).
My 2 cents...
--
http://mail.python.org/mailman/listinfo/python-list