You can use a pure functional approach and move methods that class users should not call for an object instance to split files.
In a purely functional approach, functions are independent of any internal state, have no side effects, and calculate the return value based only on the arguments presented.
An example to illustrate will replace the following:
# shape.py class Shape: def __init__(self, x, y): self.x = x self.y = y def area(self): return self.x * self.y
with:
# shape.py class Shape: def __init__(self, x, y): self.x = x self.y = y
Of course, it would be nice to extract the area method of the Shape class into a separate function in another file, but you can certainly move all the "helper functions" to separate the files and call them correctly from the class methods.
It will also greatly simplify the testing of ancillary functions.
source share