[英]Organizing Python classes in modules and/or packages
我喜歡每個文件有一個公共類的 Java 約定,即使有時有充分的理由將多個公共類放入單個文件中。 就我而言,我有相同接口的替代實現。 但是,如果我將它們放入單獨的文件中,我會在導入語句(或誤導性的模塊名稱)中有多余的名稱:
import someConverter.SomeConverter
而someConverter
將是文件(模塊)的名稱和SomeConverter
類名。 這對我來說看起來很不優雅。 將所有替代類放在一個文件中會導致更有意義的導入語句:
import converters.SomeConverter
但是我擔心如果我將所有相關的類放在一個模塊文件中,文件會變得非常大。 這里的 Python 最佳實踐是什么? 每個文件一個班級不尋常嗎?
很多都是個人喜好。 使用 python 模塊,您可以選擇將每個類保存在一個單獨的文件中,並且仍然允許import converters.SomeConverter
(或from converters import SomeConverter
)
您的文件結構可能如下所示:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
然后在你的__init__.py
文件中:
from baseconverter import BaseConverter
from otherconverter import OtherConverter
Zach 的解決方案在 Python 3 上中斷。這是一個固定的解決方案。
很多都是個人喜好。 使用 python 模塊,您可以選擇將每個類保存在一個單獨的文件中,並且仍然允許import converters.SomeConverter
(或from converters import SomeConverter
)
您的文件結構可能如下所示:
* converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
然后在你的__init__.py
文件中:
from converters.baseconverter import BaseConverter
from converters.otherconverter import OtherConverter
上面的解決方案是好的,但是在__init__.py
導入模塊的問題是這會導致所有模塊加載兩次(效率低下) 。 嘗試在otherconverter.py
的末尾添加一條打印語句並運行otherconverter.py
。 (你會看到打印語句被執行了兩次)
我更喜歡以下內容。 使用另一個名為“_converter”的包並在那里定義所有內容。 然后你的“converters.py”成為訪問所有公共成員的接口
* _converters
- __init__.py
- baseconverter.py
- someconverter.py
- otherconverter.py
* converters.py
converters.py
在哪里
from _converters.someconverter import SomeConverter
from _converters.otherconverter import OtherConverter
...
...
...
converters = [SomeConverter, OtherConverter, ...]
而且正如前面提到的解決方案,這是個人選擇。 一些實踐涉及在包中定義一個模塊“interace.py”並在此處導入所有公共成員。 如果你有很多模塊要加載,你應該選擇效率而不是美觀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.