I like the Java convention of having one public class per file, even if there are sometimes good reasons to put more than one public class into a single file. In my case I have alternative implementations of the same interface. But if I would place them into separate files, I'd have redundant names in the import statements (or misleading module names):
import someConverter.SomeConverter
whereas someConverter
would be the file (and module) name and SomeConverter
the class name. This looks pretty inelegant to me. To put all alternative classes into one file would lead to a more meaningful import statement:
import converters.SomeConverter
But I fear that the files become pretty large, if I put all related classes into a single module file. What is the Python best practise here? Is one class per file unusual?
Organize your modules into packages. Each package must contain a special __init__.py file. Your project should generally consist of one top-level package, usually containing sub-packages. That top-level package usually shares the name of your project, and exists as a directory in the root of your project's repository.
Modules and packages aren't just there to spread your Python code across multiple source files and directories—they allow you to organize your code to reflect the logical structure of what your program is trying to do.
A module is a file containing Python code. A package, however, is like a directory that holds sub-packages and modules.
Zach's solution breaks on Python 3. Here is a fixed solution.
A lot of it is personal preference. Using python modules, you do have the option to keep each class in a separate file and still allow for import converters.SomeConverter
(or from converters import SomeConverter
)
Your file structure could look something like this:
* converters - __init__.py - baseconverter.py - someconverter.py - otherconverter.py
and then in your __init__.py
file:
from converters.baseconverter import BaseConverter from converters.otherconverter import OtherConverter
A lot of it is personal preference. Using python modules, you do have the option to keep each class in a separate file and still allow for import converters.SomeConverter
(or from converters import SomeConverter
)
Your file structure could look something like this:
* converters - __init__.py - baseconverter.py - someconverter.py - otherconverter.py
and then in your __init__.py
file:
from baseconverter import BaseConverter from otherconverter import OtherConverter
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