I am writing a flask application, and I have found I have have ton of generic utility functions.
Here are the examples of the type of functions that I consider generic utility functions:
def make_hash():
return defaultdict(make_hash)
def file_read(filename):
with open(file_name_, 'r') as f:
return f.read()
def file_write(filename, data):
with open(filename, 'w') as f:
f.write(data)
I was thinking of tossing these functions into a separate module all together. However, I am curious if I have the following concerns:
Question: - What would be the pythonic way of grouping generic utility functions? Should I create a separate module? Curious what others are doing for organizing this type of code.
There is a term for this. It is called “Generic Function”. Python recently added support for generic function in Python 3.4 (PEP 443). They did this to the functools module by adding @singledispatch decorator.
In python 3.8, there is another decorator for methods called singledispatchmethod . This decorator will transform your regular function into a single dispatch generic function. A generic function is composed of multiple functions implementing the same operation for different types.
A generic function is simply a function that performs a common task by dispatching its input to a particular method-function that is selected on the basis of the class of the input to the generic function. Languages that use generic functions are said to support generic-function OO.
I don't think it has much relation to Python, it's more a design decision.
For only these lines I would not make a separate module; however, if you use it 2 to 3 times I would not copy the code. If you later want to change something only one change is needed, keeping functionality consistent.
Also the methods seem to be very generic, so you could easily use them in other projects later.
And I assume you want to make them static (@static_method
).
What I mostly do is group generic utility classes by type, i.e. in your case one file for dictionaries (having 1 method) and one for file (having 2 methods). Later possibly more methods will be added but the functionality is grouped by type/usage.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With