Choose: class with static methods or module with functions

R

Ravi

I have to create a few helper/utility application-wide functions.
There are two options:

1. Create a Utility class and all functions as static method of that
class.

2. Create a module, utility.py and member functions.

Which is a better approach.

My personal view is that I should create a module with functions.
Classes are appropriate only when I am creating new types.
 
B

bearophileHUGS

Ravi:
Which is a better approach.
My personal view is that I should create a module with functions.

When in doubt, use the simplest solution that works well enough. In
this case, module functions are simple and probably enough.

But there can be a situation where you want to keep functions even
closer, for example because in a module you have two classes and two
groups of functions related to each class. In such situation
staticmethods seem better.

Bye,
bearophile
 
C

Chris Rebert

Ravi:

When in doubt, use the simplest solution that works well enough. In
this case, module functions are simple and probably enough.

But there can be a situation where you want to keep functions even
closer, for example because in a module you have two classes and two
groups of functions related to each class. In such situation
staticmethods seem better.

Using staticmethods also allows you to override some of functions by
subclassing if need be.
Usually that's not necessary and so plain module functions are
preferred, but I know the std lib uses staticmethods in a few places
for this reason, so it occasionally is useful to do it this way.

Cheers,
Chris
 
D

Dan Sommers

But there can be a situation where you want to keep functions even
closer, for example because in a module you have two classes and two
groups of functions related to each class. In such situation
staticmethods seem better.

In order not to guess in the face of ambiguity, I propose that you handle
that case ("two classes and two groups of functions related to each
class") by splitting that module into two modules. One module would
contain one of the classes and its related functions; the other module
would contain the other class and its related functions.

Unless, of course, you mean that you have two groups of functions, each
of which are related to *both* classes, in which case I'd still prefer
module-level functions to staticmethods, but I'm old enough that I only
speak Object Oriented as a Second Language.

Dan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,906
Latest member
SkinfixSkintag

Latest Threads

Top