In article <51678b94$0$29977$c3e8da3$54964...@news.astraweb.com>, Steven D'Aprano <steve+comp.lang.pyt...@pearwood.info> wrote:
> - If you have a complicated interface, or data with complicated internal > state, the best solution is to use a custom object with methods. > > - But if your interface is simple, and the data is simple, it is more > efficient to stick to lightweight built-ins [...] > > - If the *only* reason you use a class is to keep the data together, > that's very much a Java design. As part of our initial interview screen, we give applicants some small coding problems to do. One of the things we see a lot is what you could call "Java code smell". This is our clue that the person is really a Java hacker at heart who just dabbles in Python but isn't really fluent. It's kind of like how I can walk into a Spanish restaurant and order dinner or enquire where the men's room is, but everybody knows I'm a gringo as soon as I open my mouth. It's not just LongVerboseFunctionNamesInCamelCase(). Nor is it code that looks like somebody bought the Gang of Four patterns book and is trying to get their money's worth out of the investment. The real dead giveaway is when they write classes which contain a single static method and nothing else. That being said, I've noticed in my own coding, it's far more often that I start out writing some functions and later regret not having initially made it a class, than the other way around. That's as true in my C++ code as it is in my Python. In my mind, classes are all about data. If there's no data (i.e. no stored state), you should be thinking a collection of functions. On the other hand, if there's ONLY data and no behavior, then you should be thinking namedtuple (which is really just a shortcut way to write a trivial class). Once you start having state (i.e. data) and behavior (i.e. functions) in the same thought, then you need a class. If you find yourself passing the same bunch of variables around to multiple functions, that's a hint that maybe there's a class struggling to be written. -- http://mail.python.org/mailman/listinfo/python-list