I have a few functions that do basically the same task but using different algorithms. Since these algorithms are all related (they belong to the same parent process) I've organized them in my package my_package
as methods of an empty class in a module file called my_empty_class.py
as so:
class my_empty_class:
"""Define an empty class to hold the methods"""
def func1(param1, param2, param3):
# algo 1
return results
def func2(param1, param3):
# algo 2
return results
def func3(param2, param4):
# algo 3
return results
The package files are organized as:
my_package/
__init__.py
my_empty_class.py
another_module.py
onemore_module.py
...
This is what my __init__.py
looks like:
from .my_empty_class import my_empty_class as my_empty_class
from .another_module import another_module as another_module
from .onemore_module import onemore_module as onemore_module
...
Finally, I call the methods with:
import my_package
res1 = my_package.my_empty_class.func1(param1, param2, param3)
res2 = my_package.my_empty_class.func2(param1, param3)
res3 = my_package.my_empty_class.func3(param2, param4)
Is this bad practice? Because it works, but it feels like it is. Is there maybe a better/more recommended way to go about this?
It's just unnecessary and you can achieve the same with less code.
Instead of:
class my_empty_class: """Define an empty class to hold the methods""" def func1(param1, param2, param3): # algo 1 return results def func2(param1, param3): # algo 2 return results def func3(param2, param4): # algo 3 return results
write:
"""A module to hold the functions"""
def func1(param1, param2, param3):
# algo 1
return results
def func2(param1, param3):
# algo 2
return results
def func3(param2, param4):
# algo 3
return results
Instead of:
from .my_empty_class import my_empty_class as my_empty_class
write:
from . import my_empty_class
(as my_empty_class
was already unnecessary before.)
Of course, the name my_empty_class
now does not fit anymore, because there is no empty class, and you should find a better name, like algorithms
.