Steven D'Aprano wrote: > Mostly for Bob, but also for anyone else interested: > > When To Use Classes > > http://kentsjohnson.com/stories/00014.html
Just a minor nit, but you don't even need a custom function for the callback result = [] db.query(sql, result.append) The lesson is that Python already provides some powerful ready-to-use classes that take you a long way without having to write your own custom classes. Another alternative to (explicit) classes are generators which are an elegant way to hold state and provide a simple interface. In modern Python db.query() should be an iterable to that the above can be written result = list(db.query(sql)) (That was easy; but I wonder what tkinter would look like without callbacks...) > He says: > > You may have several functions that use the same state > variables, either reading or writing them. You are passing > a lot of parameters around. You have nested functions that > have to forward their parameters to the functions they use. > You are tempted to make some module variables to hold the > state. > > You could make a class instead! > > > > Indeed you could, and sometimes you should, but we can see a problem > here. The situation described is a bad situation to be in: there is too > much coupling between functions, too much state being passed around. > > Ideally we should try to *reduce the coupling* between components, if > possible, and hence make the program less complex. OO design tries to > encapsulate the coupling within (hopefully) a single class, but it does > nothing to reduce the coupling or complexity. > > So I would say: > > - if your code is complex, with lots of connections between > components (coupling), try to reduce the coupling and make > the code simper; Even if you can simplify the code with functions classes often give you a nicer interface. Nobody would want to write a + b * c as add(a, mul(b, c)) > - if you can't, encapsulate it in classes. I think it's important that you say "classes", not "class". As with functions three small dedicated classes are much better than one big know- it-all/do-it-all class. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor