簡體   English   中英

在模塊和/或包中組織 Python 類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM