John Salerno wrote: > Ok, I have a new random question for today -- feel free to ignore and > get back to your real jobs! :) > > Anyway, I'm creating a GUI (yes, all part of my master plan to > eventually have some sort of database application working) and it's > going to involve a wx.Notebook control. I think I have two options for > how I can do this. Within the class for the main window frame, I can say: > > notebook = wx.Notebook(panel) # panel is parent of the Notebook control > > This uses the default wx.Notebook class, and works just fine. But I was > thinking, is it a smart idea to do this instead: > > class MyNotebook(wx.Notebook): > def __init__(self, parent): > wx.Notebook.__init__(self, parent) > > and then call it from the main frame as: > > notebook = MyNotebook(panel) > > This seems to allow for future expansion of the customized Notebook > class, but at the same time I have no idea how or why I'd want to do that. > > So my question in general is, is it a good idea to default to an OOP > design like my second example when you aren't even sure you will need > it?
It of course depends on a lot of factors. Two of these factors are: 1/ given my current knowledge of the project, what are the probabilities that I'll end up subclassing wx.Notebook ? 2/ if so, in how many places would I have to s/wx.Notebook/MyNotebook/ The second factor is certainly the most important here. Even if the answer to 1/ is "> 50%", if there's only a couple of calls in a single file, there's really no need to do anything by now IMHO. As a side note, the common OO pattern for this potential problem is to replace direct instanciation with a factory, so you just have to modify the factory's implementation. Now one of the nice things with Python is that it doesn't have a "new" keyword, instead using direct calls to the class (the fact is that in Python, classes *are* factories already). Another nice thing is that you can easily 'alias' callables. The combination of these 2 features makes factory pattern mostly straightforward and transparent. As someone already pointed out, you don't need to subclass wx.Notebook - just 'alias' it to another name. > I know it won't hurt, Mmm... Not so sure. One could argue that "premature generalization is the root of all evil" !-) > and is probably smart to do sometimes, cf above. > but > maybe it also just adds unnecessary code to the program. It's not that much about the unnecessary code (which can boil down to a single assignement), but about the unnecessary level of indirection (which, as someone stated, is the one and only problem that cannot be solved by adding a level of indirection !-). -- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in '[EMAIL PROTECTED]'.split('@')])" -- http://mail.python.org/mailman/listinfo/python-list